node.js - download npm ¿Cuál es la diferencia entre tilde (~) y caret (^) en package.json?



7 Answers

Me gustaría agregar también la documentación oficial de npmjs que describe todos los métodos de especificidad de versión, incluidos los mencionados en la pregunta:

https://docs.npmjs.com/files/package.json

https://docs.npmjs.com/misc/semver#x-ranges-12x-1x-12-

  • ~version "Aproximadamente equivalente a la versión" Consulte npm semver - Tilde Ranges & semver (7)
  • ^version "Compatible con la versión" Ver npm semver - Caret Ranges & semver (7)
  • 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
  • http://sometarballurl (puede ser la URL de un http://sometarballurl que se descargará e instalará localmente
  • * Coincide con cualquier versión
  • latest obtiene último lanzamiento

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

npm install node

Después de actualizar a los últimos node estables y npm , probé npm install moment --save . Guarda la entrada en package.json con el prefijo caret(^) . 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?



~ Corrige números mayores y menores. Se usa cuando está listo para aceptar correcciones de errores en su dependencia, pero no desea ningún cambio potencialmente incompatible.

^ arregla el número mayor solamente. 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.

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

Entonces, ^ es un buen valor predeterminado, pero no es perfecto. Sugiero que escoja y configure cuidadosamente el operador semver que sea más útil para usted.




~ : 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



La coincidencia de sombrero puede considerarse "rota" porque no se actualizará ^0.1.2 a 0.2.0 . Cuando el software esté emergiendo, use 0.xy versiones 0.xy y la coincidencia de sombrero 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 viejos se han ido. Si no quiere descifrar 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, cuando el software esté 100% listo y con todas las funciones, será como la versión 11.0.0 y no parece muy significativo, y en realidad parece confuso. Si, por otro lado, 0.3.x versiones 0.1.x -> 0.2.x -> 0.3.x , entonces, cuando el software finalmente esté 100% terminado y con todas las funciones, se lanza como la versión 1.0.0 y significa "Esta versión es una versión de 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 mes próximo, y no abandonará el paquete".

La regla es: use la versión 0.xy cuando su software aún no haya madurado y 0.xy incrementando el dígito medio cuando cambie su API pública (por lo tanto, las personas que tengan ^0.1.0 no obtendrán 0.2.0 actualización de 0.2.0 y 0.2.0 ) t romper su código). Luego, cuando el software madure, 1.0.0 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 tienen ^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.



Probablemente has visto la tilde (~) y el caret (^) en el package.json. ¿Cuál es la diferencia entre ellos?

Cuando haga npm install moment --save, se guarda la entrada en package.json con el prefijo caret (^).

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 se perderá 1.3.0.

El caret (^)

El caret (^), por otro lado, es más relajado. Le actualizará a la versión principal más reciente (el primer número). ^ 1.2.3 coincidirá con cualquier versión 1.xx incluyendo 1.3.0, pero se mantendrá en 2.0.0.

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




Tilde (~)

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

"express": "~4.13.3" 

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

Caret (^)

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 comprobará 3.xx donde x es cualquier cosa




~ specfices a versiones menores de versión ^ especifica a versiones principales de versión

Por ejemplo, si la versión del paquete es 4.5.2, en la Actualización ~ 4.5.2 se instalará la última versión 4.5.x (VERSIÓN MENOR) ^ 4.5.2 se instalará la última versión 4.xx (VERSIÓN MAYOR)




Related


Tags

node.js   npm