¿Cuál es la diferencia entre tilde (~) y símbolo de intercalación (^) en package.json?
Después de actualizar a la última versión estable node
, npm
lo intenté npm install moment --save
. Guarda la entrada en package.json
con el ^
prefijo de intercalación. Anteriormente, era un ~
prefijo de tilde.
- ¿ Por qué se realizan estos cambios en
npm
? - ¿ Cuál es la diferencia entre tilde
~
y signo de intercalación^
? - ¿Cuáles son las ventajas respecto a los anteriores?
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.3
utilizará 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.3
utilizará 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
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)
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
.
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:
Fuente: "Hoja de referencia de control de versiones semánticas" .