node mac last instalar node.js npm

node.js - mac - npm version



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

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?

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, 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.

http://fredkschott.com/post/2014/02/npm-no-longer-defaults-to-tildes/

Tenga en cuenta que la terminología del autor es algo engañosa: cuando dice "la versión menor más reciente" para ~ significa "la versión de parche más reciente en la versión menor especificada". De manera similar para ^, "la versión principal más reciente" debe leerse como "la versión menor más reciente en la versión principal especificada".


Semver

<major>.<minor>.<patch>-beta.<beta> == 1.2.3-beta.2

  • Utilice la semver.npmjs.com para la prueba. (Aunque las explicaciones para ^ (incluyen todo lo que es mayor que una versión particular en el mismo rango principal) y ~ (incluyen todo lo que es mayor que una versión particular en el mismo rango menor) no son correctas al 100%, 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 rechazar cambios

  • Versión pin: 1.2.3 .
  • Use ^ (como la 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 se congela el nivel más a la derecha o se 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 .
  • Omita el nivel más a la derecha: 0.2 significa 0.2 <= v < 1 . Difiere de ~ porque:
    • Comenzar la versión de nivel omitida siempre es 0
    • Puede establecer la versión principal de inicio sin especificar subniveles.

Todas las posibilidades (con suerte)

Establecer el nivel principal de inicio y permitir actualizaciones hacia arriba

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

Congelar mayor nivel

~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 menor nivel

^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

Nivel de parche congelado

~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 el parche mayor, el menor, el parche o la especificación del número sin número, es el mismo que para el nivel faltante.

Aviso : Cuando instale un paquete que tiene 0 como nivel principal, la actualización solo instalará la nueva versión beta / pr level. 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 de parches mayores / menores.


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.

major.minor.patch 1.0.2

Major, minor y patch representan las diferentes versiones de un paquete.

npm usa la tilde (~) y el caret (^) para designar qué parche y versiones menores usar respectivamente.

Entonces, si ve ~ 1.0.2, significa instalar la versión 1.0.2 o la última versión del parche, como 1.0.4. Si ve ^ 1.0.2, significa instalar la versión 1.0.2 o la última versión menor o parche, como 1.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.


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 permite instalar una versión más nueva de un paquete que la especificada. El uso de tilde ( ~ ) le brinda correcciones de errores y caret ( ^ ) también le brinda una nueva funcionalidad compatible hacia atrás.

El problema es que las versiones anteriores generalmente no reciben tantas correcciones de errores, por lo que npm usa caret ( ^ ) como predeterminado para --save .

Según: "Semver explicó: ¿por qué hay un caret (^) en mi package.json?" .

Tenga en cuenta que las reglas se aplican a las versiones superiores a 1.0.0 y no todos los proyectos siguen las versiones semánticas. Para las versiones 0.xx, el caret solo permite actualizaciones de parches , es decir, se comporta igual que la tilde. Ver "Caret Ranges"

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

Fuente: "Cheatsheet de versión semántica" .


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


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



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


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


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


Una explicación de línea

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

npm comprueba y corrige la versión de un paquete en particular basado en estos caracteres

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

por ejemplo: ~ 2.4.1 significa que comprobará 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 comprobará 2.xx donde x es cualquier cosa


~ Tilde:

  • ~ 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.
  • 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.
  • Tilde (~) te da versiones de corrección de errores

^ Caret:

  • ^ 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.
  • 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.
  • Caret (^) también te ofrece una nueva funcionalidad compatible con versiones anteriores.