Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

778
Vistas
¿Cuál es la diferencia entre tilde (~) y caret (^) en package.json?

Después de actualizar al último node estable y npm , probé npm install moment --save . Guarda la entrada en el package.json con el prefijo de intercalación ^ . Anteriormente, era un prefijo de tilde ~ .

  1. ¿Por qué se hacen estos cambios en npm ?
  2. ¿Cuál es la diferencia entre tilde ~ y caret ^ ?
  3. ¿Cuáles son las ventajas sobre los demás?
over 4 years ago · Santiago Trujillo
19 Respuestas
Responde la pregunta

0

^ es 1.[cualquiera].[cualquiera] (última versión secundaria)
~ es 1.2.[cualquiera] (último parche)

Una gran lectura es esta publicación de blog sobre cómo semver se aplica a npm
y lo que están haciendo para que coincida con el estándar semver
http://blog.npmjs.org/post/98131109725/npm-2-0-0

over 4 years ago · Santiago Trujillo Denunciar

0

También me gustaría agregar la documentación oficial de npmjs que describe todos los métodos para la especificidad de la versión, incluidos los mencionados en la pregunta.

valor descripción
~version "Aproximadamente equivalente a la versión"
Ver npm semver - Rangos Tilde
^version "Compatible con la versión"
Ver npm semver - Intervalos de intercalación
version Debe coincidir exactamente con la versión
>version Debe ser mayor que la versión
>=version etc.
<version
<=version
1.2.x 1.2.0, 1.2.1, etc., pero no 1.3.0
* Coincide con cualquier versión
latest Obtiene la última versión

La lista de arriba no es exhaustiva. Otros especificadores de versión incluyen URL de GitHub y repositorios de usuarios de GitHub, rutas locales y paquetes con etiquetas npm específicas

Documentos oficiales

  • npm docs > paquete.json > dependencias
  • npm docs > semver > versiones
  • sever (7)
over 4 years ago · Santiago Trujillo Denunciar

0

~ : Razonablemente cerca de

 ~1.1.5: 1.1.0 <= accepted < 1.2.0

^ : Compatible con

 ^1.1.5: 1.1.5 <= accepted < 2.0.0 ^0.1.3: 0.1.3 <= accepted < 0.2.0 ^0.0.4: 0.0.4 <= accepted < 0.1.0
over 4 years ago · Santiago Trujillo Denunciar

0

npm permite instalar una versión más nueva de un paquete que la especificada. El uso de tilde ( ~ ) le brinda versiones de corrección de errores y el signo de intercalación ( ^ ) también le brinda una nueva funcionalidad compatible con versiones anteriores.

El problema es que las versiones antiguas generalmente no reciben tantas correcciones de errores, por lo que npm usa el signo de intercalación ( ^ ) como valor predeterminado para --save .

mesa de trabajo

De acuerdo con: "Semver explicó: ¿por qué hay un signo de intercalación (^) en mi paquete.json?" .

Tenga en cuenta que las reglas se aplican a las versiones anteriores a la 1.0.0 y no todos los proyectos siguen el control de versiones semántico. Para las versiones 0.xx, el signo de intercalación solo permite actualizaciones de parches , es decir, se comporta igual que la tilde. Consulte "Rangos de intercalación"

Aquí hay una explicación visual de los conceptos:

diagrama de corte

Fuente: "Hoja de trucos de control de versiones semánticas" .

over 4 years ago · Santiago Trujillo Denunciar

0

semver

 <major>.<minor>.<patch>-beta.<beta> == 1.2.3-beta.2
  • Use la calculadora npm semver para realizar pruebas. Aunque las explicaciones para ^ (incluye todo lo que sea mayor que una versión particular en el mismo rango principal) y ~ (incluye todo lo que sea mayor que una versión particular en el mismo rango menor) no son 100% correctas, la calculadora parece funcionar bien.
  • Alternativamente, use SemVer Check en su lugar, que no requiere que elija un paquete y también ofrece explicaciones.

Permitir o no permitir cambios

  • Pin versión: 1.2.3 .
  • Usa ^ (como cabeza). Permite actualizaciones en el segundo nivel distinto de cero desde la izquierda: ^0.2.3 significa 0.2.3 <= v < 0.3 .
  • Use ~ (como la cola). Generalmente congela el nivel más a la derecha o establece cero si se omite:
  • ~1 significa 1.0.0 <= v < 2.0.0
  • ~1.2 significa 1.2.0 <= v < 1.3.0 .
  • ~1.2.4 significa 1.2.4 <= v < 1.3.0 .
  • Omitir el nivel más a la derecha: 0.2 significa 0.2 <= v < 1 . Difiere de ~ porque:
    • La versión inicial del nivel omitido siempre es 0
    • Puede configurar la versión principal inicial sin especificar subniveles.

Todas (con suerte) posibilidades

Establezca el nivel principal inicial y permita actualizaciones hacia arriba

 * or "(empty string) any version 1 v >= 1

Congelar nivel principal

 ~0 (0) 0.0 <= v < 1 0.2 0.2 <= v < 1 // Can't do that with ^ or ~ ~1 (1, ^1) 1 <= v < 2 ^1.2 1.2 <= v < 2 ^1.2.3 1.2.3 <= v < 2 ^1.2.3-beta.4 1.2.3-beta.4 <= v < 2

Congelar nivel menor

 ^0.0 (0.0) 0 <= v < 0.1 ~0.2 0.2 <= v < 0.3 ~1.2 1.2 <= v < 1.3 ~0.2.3 (^0.2.3) 0.2.3 <= v < 0.3 ~1.2.3 1.2.3 <= v < 1.3

Congelar nivel de parche

 ~1.2.3-beta.4 1.2.3-beta.4 <= v < 1.2.4 (only beta or pr allowed) ^0.0.3-beta 0.0.3-beta.0 <= v < 0.0.4 or 0.0.3-pr.0 <= v < 0.0.4 (only beta or pr allowed) ^0.0.3-beta.4 0.0.3-beta.4 <= v < 0.0.4 or 0.0.3-pr.4 <= v < 0.0.4 (only beta or pr allowed)

No permitir actualizaciones

 1.2.3 1.2.3 ^0.0.3 (0.0.3) 0.0.3

Aviso : falta mayor, menor, parche o la especificación de beta sin número, es lo mismo que any nivel faltante.

Aviso : ¡Cuando instala un paquete que tiene 0 como nivel principal, la actualización solo instalará una nueva versión de nivel beta/pr! Esto se debe a que npm establece ^ como predeterminado en package.json y cuando la versión instalada es como 0.1.3 , congela todos los niveles principales/secundarios/de parches.

  • https://docs.npmjs.com/misc/semver
  • https://docs.npmjs.com/files/package.json#dependencies
over 4 years ago · Santiago Trujillo Denunciar

0

Consulte los documentos de NPM y los documentos de Semver :

  • ~version "Aproximadamente equivalente a la versión" , lo actualizará a todas las futuras versiones de parches, sin incrementar la versión secundaria. ~1.2.3 utilizará versiones de 1.2.3 a <1.3.0.

  • ^version "Compatible con la versión" , lo actualizará a todas las futuras versiones secundarias/parches, sin incrementar la versión principal. ^2.3.4 utilizará versiones de 2.3.4 a <3.0.0.

Consulte los comentarios a continuación para conocer las excepciones, en particular para las versiones anteriores, como ^ 0.2.3

over 4 years ago · Santiago Trujillo Denunciar

0

Siempre que el primer número ("mayor") sea al menos 1:

~ bloquea números mayores y menores. Se usa cuando está listo para aceptar solo correcciones de errores (incrementos en el tercer número), pero no desea ningún otro cambio, ni siquiera actualizaciones menores que agreguen funciones.

^ bloquea solo el número mayor. Se usa cuando está dispuesto a recibir correcciones de errores (incrementos en el tercer número) y actualizaciones menores que agregan funciones pero no deberían romper el código existente (incrementos en el segundo número). Sin embargo, no desea cambios que rompan el código existente (incrementos en el primer número).

Además de eso, ^ no es compatible con versiones anteriores de npm y debe usarse con precaución.

Entonces, ^ es un buen valor predeterminado, pero no es perfecto. Sugiero elegir y configurar cuidadosamente el operador de semver que le resulte más útil.

(Revisado para evitar decir "arreglos" y "correcciones de errores" con el uso conflictivo de "arreglos", lo cual es confuso)

over 4 years ago · Santiago Trujillo Denunciar

0

~ tilde:

  • ~ congela números mayores y menores.
  • Se usa cuando está listo para aceptar correcciones de errores en su dependencia, pero no quiere ningún cambio potencialmente incompatible.
  • La tilde coincide con la versión menor más reciente (el número del medio).
  • ~1.2.3 coincidirá con todas las versiones 1.2.x, pero se perderá 1.3.0.
  • Tilde (~) le brinda versiones de corrección de errores

^ Intercalación:

  • ^ congela solo el número mayor.
  • Se usa cuando está observando de cerca sus dependencias y está listo para cambiar rápidamente su código si la versión menor es incompatible.
  • Lo actualizará a la versión principal más reciente (el primer número).
  • ^ 1.2.3 coincidirá con cualquier versión 1.xx, incluida la 1.3.0, pero se retrasará en la 2.0.0.
  • Caret (^) también le brinda una nueva funcionalidad compatible con versiones anteriores.
over 4 years ago · Santiago Trujillo Denunciar

0

La combinación de sombreros puede considerarse "rota" porque no actualizará ^0.1.2 a 0.2.0 . Cuando el software esté emergiendo, use versiones 0.xy y la coincidencia de sombreros solo coincidirá con el último dígito variable ( y ). Esto se hace a propósito. La razón es que mientras el software evoluciona, la API cambia rápidamente: un día tienes estos métodos y el otro día tienes esos métodos y los antiguos ya no están. Si no desea romper el código para las personas que ya están usando su biblioteca, vaya e incremente la versión principal: por ejemplo, 1.0.0 -> 2.0.0 -> 3.0.0 . Entonces, para cuando su software esté finalmente 100% terminado y con todas las funciones, será como la versión 11.0.0 y eso no parece muy significativo, y en realidad parece confuso. Si, por otro lado, estaba usando 0.1.x -> 0.2.x -> 0.3.x , para cuando el software finalmente esté 100% terminado y con todas las funciones, se lanzará como versión 1.0.0 y significa "Esta versión es un servicio a largo plazo, puede continuar y usar esta versión de la biblioteca en su código de producción, y el autor no cambiará todo mañana o el próximo mes, y no abandonará el paquete".

La regla es: use el control de versiones 0.xy cuando su software aún no haya madurado y publíquelo incrementando el dígito medio cuando cambie su API pública (por lo tanto, las personas que tengan ^0.1.0 no obtendrán la actualización 0.2.0 y no romper su código). Luego, cuando el software madure, publíquelo bajo 1.0.0 e incremente el dígito más a la izquierda cada vez que cambie su API pública (por lo tanto, las personas que tengan ^1.0.0 no obtendrán la actualización 2.0.0 y no romperán su código).

 Given a version number MAJOR.MINOR.PATCH, increment the: MAJOR version when you make incompatible API changes, MINOR version when you add functionality in a backwards-compatible manner, and PATCH version when you make backwards-compatible bug fixes.
over 4 years ago · Santiago Trujillo Denunciar

0

Explicación de una línea

El sistema de versiones estándar es major.minor.build (por ejemplo, 2.4.1)

npm verifica y corrige la versión de un paquete en particular en función de estos caracteres

~ : la versión principal está arreglada, la versión secundaria está arreglada, coincide con cualquier número de compilación

por ejemplo: ~2.4.1 significa que buscará 2.4.x donde x es cualquier cosa

^ : la versión principal es fija, coincide con cualquier versión secundaria, coincide con cualquier número de compilación

por ejemplo: ^2.4.1 significa que buscará 2.xx donde x es cualquier cosa

over 4 years ago · Santiago Trujillo Denunciar

0

Probablemente haya visto la tilde (~) y el signo de intercalación (^) en el paquete.json. ¿Cuál es la diferencia entre ellos?

Cuando hace npm install moment --save, guarda la entrada en el paquete.json con el prefijo de intercalación (^).

La tilde (~)

En los términos más simples, la tilde (~) coincide con la versión menor más reciente (el número del medio). ~1.2.3 coincidirá con todas las versiones 1.2.x pero perderá 1.3.0.

El símbolo de intercalación (^)

El signo de intercalación (^), por otro lado, está más relajado. Lo actualizará a la versión principal más reciente (el primer número). ^ 1.2.3 coincidirá con cualquier versión 1.xx, incluida la 1.3.0, pero pospondrá la 2.0.0.

Referencia: https://medium.com/@Hardy2151/caret-and-tilde-in-package-json-57f1cbbe347b

over 4 years ago · Santiago Trujillo Denunciar

0

Tilde ~ especifica lanzamientos de versiones menores

Caret ^ especifica los lanzamientos de versiones principales

Por ejemplo, si la versión del paquete es 4.5.2 , en la actualización:

~4.5.2 instalará la última 4.5.x version (MINOR VERSION)

^4.5.2 instalará la última 4.xx version (MAJOR VERSION)

over 4 years ago · Santiago Trujillo Denunciar

0

tilde (~)

la versión principal está arreglada, la versión secundaria está arreglada, coincide con cualquier número de compilación

 "express": "~4.13.3"

~4.13.3 significa que buscará 4.13.x donde x es cualquier cosa y 4.14.0

Intercalación (^)

la versión principal es fija, coincide con cualquier versión secundaria, coincide con cualquier número de compilación

 "supertest": "^3.0.0"

^3.0.0 significa que buscará 3.xx donde x es cualquier cosa

over 4 years ago · Santiago Trujillo Denunciar

0

No es una respuesta per se, sino una observación que parece haber sido pasada por alto.

La descripción de los rangos de intercalación:

ver: https://github.com/npm/node-semver#caret-ranges-123-025-004

Permite cambios que no modifican el dígito distinto de cero más a la izquierda en la tupla [principal, menor, parche].

Significa que ^10.2.3 coincide con 10.2.3 <= v < 20.0.0

No creo que eso sea lo que querían decir. Obtener las versiones 11.xx a 19.xx romperá su código.

Creo que se referían left most non-zero number field . No hay nada en SemVer que requiera que los campos numéricos sean de un solo dígito.

over 4 years ago · Santiago Trujillo Denunciar

0

Tilde ~ coincide con la versión menor, si ha instalado un paquete que tiene 1.4.2 y después de su instalación, las versiones 1.4.3 y 1.4.4 también están disponibles si en su paquete.json se usa como ~ 1.4.2 y luego npm install en su proyecto después de la actualización instalará 1.4.4 en su proyecto. Pero hay 1.5.0 disponible para ese paquete, entonces ~ no lo instalará. Se llama versión menor.

Caret ^ coincide con la versión principal, si el paquete 1.4.2 está instalado en su proyecto y después de que se publique la instalación 1.5.0, entonces ^ instalará la versión principal. No permitirá instalar 2.1.0 si tiene ^1.4.2 .

Versión fija si no desea cambiar la versión del paquete en cada instalación, entonces use la versión fija sin ningún carácter especial, por ejemplo, "1.4.2"

Última versión * Si desea instalar la última versión, use solo * delante del nombre del paquete.

over 4 years ago · Santiago Trujillo Denunciar

0

El número de versión está en la sintaxis que designa cada sección con un significado diferente. la sintaxis se divide en tres secciones separadas por un punto.

mayor.menor.parche 1.0.2

Mayor, menor y parche representan las diferentes versiones de un paquete.

npm usa la tilde (~) y el signo de intercalación (^) para designar qué parche y versiones secundarias usar respectivamente.

Entonces, si ve ~ 1.0.2, significa que debe instalar la versión 1.0.2 o la última versión del parche, como 1.0.4. Si ve ^ 1.0.2, significa que debe instalar la versión 1.0.2 o la última versión secundaria o parche, como 1.1.0.

over 4 years ago · Santiago Trujillo Denunciar

0

intercalación ^ incluye todo lo que sea mayor que una versión particular en el mismo rango principal.

tilde ~ incluye todo lo que sea mayor que una versión particular en el mismo rango menor.

Por ejemplo, para especificar rangos de versiones aceptables hasta 1.0.4, use la siguiente sintaxis:

  • Lanzamientos de parches: 1.0 o 1.0.x o ~1.0.4
  • Versiones menores: 1 o 1.x o ^1.0.4
  • Lanzamientos principales: * o x

Para obtener más información sobre la sintaxis de versiones semánticas, consulte la calculadora de npm semver .

Versiones semánticas de npm en paquetes publicados§

Más de la documentación de npm Acerca de las versiones semánticas

over 4 years ago · Santiago Trujillo Denunciar

0

semver está separado en 3 secciones principales que están divididas por puntos.

 major.minor.patch 1.0.0

Estos diferentes principales, secundarios y parches se utilizan para identificar diferentes versiones. tide (~) y signo de intercalación (^) se utilizan para identificar qué versión secundaria y de parche se utilizará en el control de versiones del paquete.

 ~1.0.1 Install 1.0.1 or **latest patch versions** such as 1.0.2 ,1.0.5 ^1.0.1 Install 1.0.1 or **latest patch and minor versions** such as 1.0.2 ,1.1.0 ,1.1.1
over 4 years ago · Santiago Trujillo Denunciar

0

En relación con esta pregunta, puede revisar la documentación de Composer en las versiones , pero aquí en resumen:

  • Rango de versión de tilde ( ~ ) - ~1.2.3 es equivalente a >=1.2.3 < 1.3.0
  • Rango de versión de intercalación ( ^ ) - ~1.2.3 es equivalente a >=1.2.3 < 2.0.0

Por lo tanto, con Tilde obtendrá actualizaciones automáticas de parches, pero las versiones menores y mayores no se actualizarán. Sin embargo, si usa Caret obtendrá parches y versiones secundarias, pero no obtendrá versiones principales (cambios importantes).

La versión Tilde se considera un enfoque "más seguro", pero si está utilizando dependencias confiables (bibliotecas bien mantenidas) no debería tener ningún problema con la versión Caret (porque los cambios menores no deberían ser cambios importantes).

Probablemente debería revisar esta publicación de stackoverflow sobre las diferencias entre la instalación y la actualización del compositor .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda