Después de actualizar a la última versión estable node
y npm
, lo intenté npm install moment --save
. Guarda la entrada package.json
con el ^
prefijo de intercalación . Anteriormente, era un ~
prefijo de tilde .
npm
?~
y caret ^
?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 futuras versiones menores / 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 ¿Cuál es la diferencia entre tilde (~) y caret (^) en package.json?
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 que se mencionan 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.0http://sometarballurl
(esta puede ser la URL de un tarball que se descargará e instalará localmente*
Coincide con cualquier versiónlatest
Obtiene la última versiónLa lista de arriba no es exhaustiva. Otros especificadores de versión incluyen URL de GitHub y repositorios de usuario de GitHub, rutas locales y paquetes con etiquetas npm específicas
npm permite instalar una versión más reciente de un paquete que la especificada. El uso de tilde ( ~
) le brinda versiones de corrección de errores y caret ( ^
) también le brinda una nueva funcionalidad compatible con versiones anteriores.
El problema es que las versiones antiguas no suelen recibir tantas correcciones de errores, por lo que npm usa el símbolo de intercalación ( ^
) como predeterminado para --save
.
Según: "Semver explicó: ¿por qué hay un signo de intercalación (^) en mi package.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 símbolo de intercalación solo permite actualizaciones de parches , es decir, se comporta igual que la tilde. Ver "Rangos de Caret"
Aquí hay una explicación visual de los conceptos:
Fuente: "Hoja de referencia de control de versiones semántico" .
<major>.<minor>.<patch>-beta.<beta> == 1.2.3-beta.2
1.2.3
.^
(como cabeza). Permite actualizaciones en el segundo nivel distinto de cero desde la izquierda: ^0.2.3
significa 0.2.3 <= v < 0.3
.~
(como cola). Por lo general, congele el nivel más a la derecha o establezca cero si se omite:~1
medio 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
.0.2
significa 0.2 <= v < 1
. Se diferencia de ~
porque:
0
Establecer el nivel principal inicial y permitir actualizaciones hacia arriba
* or "(empty string) any version
1 v >= 1
Congelar nivel mayor
~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 especificar beta
sin número, es lo mismo que any
para el nivel faltante.
Aviso : cuando instalas un paquete que tiene 0
un nivel principal, la actualización solo instalará una nueva versión de nivel beta / pr. Esto se debe a que se npm
establece ^
como predeterminado en package.json
y cuando la versión instalada es como 0.1.3
, congela todos los niveles principales / menores / de parches.
~
corrige números mayores y menores. Se usa cuando está listo para aceptar correcciones de errores en su dependencia, pero no desea cambios potencialmente incompatibles.
^
corrige 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 una versión menor no es compatible.
Además de eso, Instalar grunt-phonegap - Error: No se encontró una versión compatible: [email protected]'^1.12.0 '^
es Instalar grunt-phonegap - Error: No se encontró una versión compatible: [email protected]'^1.12.0 ' con versiones antiguas de npm y debe usarse con precaución.
Por lo tanto, ^
es un buen valor predeterminado, pero no es perfecto. Sugiero elegir y configurar 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
^
es 1. [cualquiera]. [cualquiera] (última versión secundaria)
~
es 1.2. [cualquiera] (último parche)
Una excelente lectura es esta publicación de blog sobre cómo se aplica semver a npm
y qué están haciendo para que coincida con el estándar semver
http://blog.npmjs.org/post/98131109725/npm-2-0-0
~ Tilde:
~
congela los números mayores y menores.^ Cuidado:
^
congela solo el número mayor.La combinación de sombreros puede considerarse "rota" porque no se actualiza ^0.1.2
a 0.2.0
. Cuando el software está emergiendo, use 0.x.y
versiones 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 está evolucionando, 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 desea 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, para cuando su software esté finalmente hecho al 100% y con todas las funciones, será como una versión 11.0.0
y eso no parece muy significativo, y en realidad parece confuso. Si, por otro lado, estuviera usando 0.1.x
-> 0.2.x
-> 0.3.x
versiones, entonces cuando el software finalmente esté terminado al 100% 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 mes próximo, y no abandonará el paquete ".
La regla es: use el 0.x.y
control de versiones cuando su software aún no haya madurado y libérelo aumentando el dígito del medio cuando cambie su API pública (por lo tanto, las personas que ^0.1.0
lo tengan no recibirán 0.2.0
actualizaciones y no romperán su código). Luego, cuando el software madure, suéltelo debajo 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 ^1.0.0
lo tengan no se 2.0.0
actualizarán 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.
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 package.json se usa como ~ 1.4.2 entonces 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 libere la instalación 1.5.0, ^ 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, utilice 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, utilice solo * delante del nombre del paquete.
Una explicación del trazador de líneas
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 basándose en 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
Probablemente haya visto la tilde (~) y el signo de intercalación (^) en package.json. ¿Cuál es la diferencia entre ellos?
Cuando haces npm install moment --save, guarda la entrada en package.json con el prefijo de intercalación (^).
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á la 1.3.0.
El signo de intercalación (^), por otro lado, es 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 se retrasará en la 2.0.0.
Referencia: https://medium.com/@Hardy2151/caret-and-tilde-in-package-json-57f1cbbe347b
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 caret (^) 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
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
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 buscará 3.xx donde x es cualquier cosa
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 símbolo de intercalación (^) para designar qué parche y versiones menores 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 menor o parche, como 1.1.0.
quilates ^
incluyen todo lo mayor que una versión particular en la misma gama principal.
tilde ~
incluye todo lo mayor que una versión en particular en el mismo rango menor.
Por ejemplo, para especificar rangos de versiones aceptables hasta 1.0.4, use la siguiente sintaxis:
Para obtener más información sobre la sintaxis de control de versiones semántico, consulte la calculadora npm semver .
Más de la documentación de npm Acerca del control de versiones semántico
No es una respuesta en sí misma, sino una observación que parece haberse pasado por alto.
La descripción de los rangos de quilates:
ver: https://github.com/npm/node-semver#caret-ranges-123-025-004
Permite cambios que no modifican el dígito distinto de cero situado más a la izquierda en la tupla [mayor, menor, parche].
Significa que ^10.2.3
coincide10.2.3 <= v < 20.0.0
No creo que eso es lo que querían decir. Extraer las versiones 11.xx a 19.xx romperá su código.
Creo que querían decir left most non-zero number field
. No hay nada en SemVer que requiera que los campos numéricos sean de un solo dígito.
En relación con esta pregunta, puede revisar la documentación de Composer sobre las versiones , pero aquí en resumen:
Por lo tanto, con Tilde obtendrá actualizaciones automáticas de parches, pero las versiones menores y principales no se actualizarán. Sin embargo, si usa Caret , obtendrá parches y versiones menores, pero no obtendrá versiones principales (cambios importantes).
Tilde Version se considera un enfoque "más seguro", pero si está utilizando dependencias confiables (bibliotecas bien mantenidas) no debería tener ningún problema con Caret Version (porque los cambios menores no deberían ser cambios importantes.
Probablemente debería revisar ¿Cuáles son las diferencias entre la actualización del compositor y la instalación del compositor? .
~ especifica las versiones menores ^ especifica las versiones principales
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 instalará la última versión 4.xx (VERSIÓN PRINCIPAL)
La estrella de HGTV, Christina Hall, revela que le diagnosticaron envenenamiento por mercurio y plomo, probablemente debido a su trabajo como manipuladora de casas.
Recientemente salió a la luz un informe policial que acusa a la estrella de 'Love Is Blind', Brennon, de violencia doméstica. Ahora, Brennon ha respondido a los reclamos.
Conozca cómo Wynonna Judd se dio cuenta de que ahora es la matriarca de la familia mientras organizaba la primera celebración de Acción de Gracias desde que murió su madre, Naomi Judd.
Descubra por qué un destacado experto en lenguaje corporal cree que es fácil trazar "tales paralelismos" entre la princesa Kate Middleton y la princesa Diana.
Los inodoros arrojan columnas de aerosol invisibles con cada descarga. ¿Como sabemos? La prueba fue capturada por láseres de alta potencia.
Air travel is far more than getting from point A to point B safely. How much do you know about the million little details that go into flying on airplanes?
The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!
¿Sigue siendo efectivo ese lote de repelente de insectos que te quedó del verano pasado? Si es así, ¿por cuánto tiempo?
Si este tráiler de pesadilla de la temporada más reciente de Great British Bake Off te asustó y te hizo no volver a ver el programa, es posible que tengas suerte: PBS no ha decidido si se transmitirá o no la última temporada en los Estados Unidos. actualización, para aquellos que no siguen sin aliento este tipo de drama de nicho: el presentador Paul Hollywood y la hermosa carpa llena de batidoras de colores pastel y cuadros se trasladaron de la BBC al Canal 4; Mary Berry, Sue Perkins y Mel Giedroyc renunciaron.
Foto: Netflix Oh, Hello On Broadway (Netflix): Después de llegar a Broadway el año pasado, los dos locos del Upper West Side interpretados por John Mulaney y Nick Kroll finalmente llegaron a Netflix. El especial consta del espectáculo en el escenario, algunos momentos entre bastidores y un invitado muy especial de “Too Much Tuna”.
¿Quiere probar un cepillo de dientes Sonicare sin gastar mucho dinero en uno de sus modelos favoritos de gama alta? Puede comprar un kit de la Serie 2 o Serie 3 por tan solo $ 30 hoy en Amazon. Haga clic aquí para ver la lista completa de modelos elegibles y tenga en cuenta que se descontarán $ 10 adicionales en su carrito.
Tapas elásticas de silicona de Tomorrow's Kitchen, paquete de 12 | $14 | Amazonas | Código promocional 20OFFKINJALids son básicamente los calcetines de la cocina; siempre perdiéndose, dejando contenedores huérfanos que nunca podrán volver a cerrarse. Pero, ¿y si sus tapas pudieran estirarse y adaptarse a todos los recipientes, ollas, sartenes e incluso frutas en rodajas grandes que sobran? Nunca más tendrás que preocuparte por perder esa tapa tan específica.
El equipo está a la espera de las medallas que ganó en los Juegos Olímpicos de Invierno de 2022 en Beijing, ya que se está resolviendo un caso de dopaje que involucra a la patinadora artística rusa Kamila Valieva.
Miles de compradores de Amazon recomiendan la funda de almohada de seda Mulberry, y está a la venta en este momento. La funda de almohada de seda viene en varios colores y ayuda a mantener el cabello suave y la piel clara. Compre las fundas de almohada de seda mientras tienen hasta un 46 por ciento de descuento en Amazon
El jueves se presentó una denuncia de delito menor amenazante agravado contra Joe Mixon.
El Departamento de Policía de Lafayette comenzó a investigar a un profesor de la Universidad de Purdue en diciembre después de recibir varias denuncias de un "hombre sospechoso que se acercaba a una mujer".
Al igual que el mundo que nos rodea, el lenguaje siempre está cambiando. Mientras que en eras anteriores los cambios en el idioma ocurrían durante años o incluso décadas, ahora pueden ocurrir en cuestión de días o incluso horas.
Estoy de vuelta por primera vez en seis años. No puedo decirte cuánto tiempo he estado esperando esto.
“And a river went out of Eden to water the garden, and from thence it was parted and became into four heads” Genesis 2:10. ? The heart is located in the middle of the thoracic cavity, pointing eastward.
Creo, un poco tarde en la vida, en dar oportunidades a la gente. Generosamente.