¿Cuál es la diferencia entre tilde (~) y símbolo de intercalación (^) en package.json?

Resuelto Fizer Khan asked hace 10 años • 22 respuestas

Después de actualizar a la última versión estable node, npmlo intenté npm install moment --save. Guarda la entrada en package.jsoncon el ^prefijo de intercalación. Anteriormente, era un ~prefijo de tilde.

  1. ¿ Por qué se realizan estos cambios en npm?
  2. ¿ Cuál es la diferencia entre tilde ~y signo de intercalación ^?
  3. ¿Cuáles son las ventajas respecto a los anteriores?
Fizer Khan avatar Mar 12 '14 13:03 Fizer Khan
Aceptado

Consulte los documentos de NPM y semver :

  • ~version “Aproximadamente equivalente a la versión” , lo actualizará a todas las versiones futuras del parche, sin incrementar la versión menor. ~1.2.3utilizará versiones de 1.2.3 a <1.3.0.

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

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

jgillich avatar Mar 12 '2014 08:03 jgillich

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 desc
~version Aproximadamente equivalente a la versión, es decir, solo acepta nuevas versiones de parches
Ver npm semver - Tilde Ranges
^version Compatible con la versión, es decir, acepta nuevas versiones menores y de parche
Ver npm semver - Caret Ranges
version Debe coincidir exactamente con la versión
>version Debe ser mayor que la versión.
>=version Debe ser igual o mayor que la versión.
<version Debe ser menor que la versión.
<=version Debe ser igual o menor que la versión.
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 direcciones 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
  • sembrar (7)
Ahmad avatar Sep 16 '2014 06:09 Ahmad

El administrador de paquetes npm permite instalar una versión del paquete más nueva que la especificada.
El uso de tilde ( ~) le brinda versiones de corrección de errores, mientras que el cursor ( ^) además le brinda nueva funcionalidad compatible con versiones anteriores.

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

Tabla SemVer

Fuente: "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 superiores a 1.0.0. No todos los proyectos siguen versiones semánticas.
Para las versiones 0.xx, el cursor sólo 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 semver

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

pspi avatar Jul 30 '2015 20:07 pspi