samuel hapak
Bower me permite especificar requisitos de versión para paquetes usando la siguiente sintaxis:
"dependencies": {
"<name>": "<version>",
},
Pero no he podido encontrar cuál es la sintaxis a usar para el <version>
. Sé que puedo especificar versiones para que sean:
- mayor que una cierta versión con
">1.0.0"
- mayor o igual que una versión:
">=1.0.0"
- o en algún rango:
"1.0.0 - 2.0.0"
.
También sé que hay una sintaxis de versión común que contiene la tilde: "~1.0.0"
. Pero no estoy seguro de lo que significa y si es lo mismo que "=1.0.0"
.
También me interesa saber si puedo especificar varias versiones no consecutivas, como exactamente 1.0.3
más versiones mayores que 1.5.0
etc…
XML
En pocas palabras, la sintaxis de los números de versión de Bower (y NPM) se llama SemVer, que es la abreviatura de ‘Semantic Versioning’. Puede encontrar documentación para la sintaxis detallada de SemVer como se usa en Bower y NPM en la API para el analizador semver dentro de Node/npm. Puede obtener más información sobre la especificación subyacente (que no no mencion ~
u otros detalles de sintaxis) en semver.org.
Hay una Calculadora visual muy práctica de semver. puedes jugar, haciendo que todo esto sea mucho más fácil de asimilar y probar.
¡SemVer no es solo una sintaxis! Tiene algunas cosas bastante interesantes que decir sobre las formas correctas de publicar API, lo que ayudará a comprender lo que significa la sintaxis. Crucialmente:
Una vez que identifica su API pública, le comunica los cambios con incrementos específicos en su número de versión. Considere un formato de versión de XYZ (Major.Minor.Patch). Las correcciones de errores que no afectan a la API incrementan la versión del parche, las adiciones/cambios de API compatibles con versiones anteriores incrementan la versión secundaria y los cambios de API incompatibles con versiones anteriores incrementan la versión principal.
Entonces, su pregunta específica sobre ~
se relaciona con ese esquema Major.Minor.Patch. (Al igual que el operador de intercalación relacionado ^
.) Puedes usar ~
para reducir el rango de versiones que está dispuesto a aceptar a:
- subsecuente nivel de parche cambios a la misma versión secundaria (“correcciones de errores que no afectan a la API”), o:
- subsecuente nivel menor cambios a la misma versión principal (“adiciones/cambios de API compatibles con versiones anteriores”)
Por ejemplo: para indicar que tomará cualquier cambio subsiguiente a nivel de parche en el árbol 1.2.x, comenzando con 1.2.0, pero menos de 1.3.0, podría usar:
"angular": "~1.2"
or:
"angular": "~1.2.0"
Esto también le da los mismos resultados que usando el .x
sintaxis:
"angular": "1.2.x"
Pero, puedes usar la tilde/~
sintaxis para ser aún más específico: si solo está dispuesto a aceptar cambios a nivel de parche comenzando con 1.2.4pero aún menos de 1.3.0, usaría:
"angular": "~1.2.4"
Moviéndose a la izquierda, hacia el importante versión, si usas…
"angular": "~1"
… es lo mismo que…
"angular": "1.x"
or:
"angular": "^1.0.0"
… y coincide con cualquier cambio menor o de nivel de parche por encima de 1.0.0 y menos de 2.0:
Tenga en cuenta que la última variación anterior: se llama ‘rango de intercalación’. El símbolo de intercalación se parece mucho a un >
por lo que estaría disculpado por pensar que significa “cualquier versión mas grande que 1.0.0″. (Ciertamente me he resbalado en eso.) ¡No!
Los rangos de intercalación se usan básicamente para decir que te importa solamente sobre el dígito significativo más a la izquierda, generalmente la versión principal, y que permitirá cualquier cambio menor o de nivel de parche que no afecte ese dígito más a la izquierda. Sin embargo, a diferencia de un rango de tilde que especifica una versión principal, los rangos de intercalación le permiten especificar un punto de inicio de parche/menor preciso. Entonces, mientras ^1.0.0 === ~1
un rango de intercalación como ^1.2.3
te permite decir que aceptarás cualquier cambio >=1.2.3 && <2.0.0
. No podrías hacer eso con un rango de tilde.
Todo eso parece confuso al principio, cuando lo miras de cerca. Pero aléjate por un segundo y piénsalo de esta manera: el signo de intercalación simplemente le permite decir que está más preocupado por cualquier dígito significativo que quede más a la izquierda. La tilde le permite decir que está más preocupado por el dígito que está más a la derecha. El resto es detalle.
Es el poder expresivo de la tilde y el signo de intercalación lo que explica por qué la gente los usa mucho más que los más simples. .x
sintaxis: simplemente te permiten hacer más. Es por eso que verá que la tilde se usa a menudo incluso donde .x
serviría Como ejemplo, vea el propio npm: su propio archivo package.json incluye muchas dependencias en ~2.4.0
formato, en lugar del 2.4.x
formatearlo pudo usar. al apegarse a ~
la sintaxis es coherente en toda una lista de más de 70 dependencias versionadas, independientemente del número de parche inicial aceptable.
De todos modos, todavía hay más en SemVer, pero no trataré de detallarlo todo aquí. Compruébalo en el Léame del paquete semver del nodo. Y asegúrese de usar el calculadora de versiones semánticas mientras practica y trata de entender cómo funciona SemVer.
RE: Números de versión no consecutivos: la pregunta final de OP parece ser sobre la especificación de números/rango de versión no consecutivos (si lo he editado de manera justa). Sí, puede hacer eso, usando el operador común de doble tubo “o”: ||
. Al igual que:
"angular": "1.2 <= 1.2.9 || >2.0.0"
-
Asi que
~
en particular significa que el número del parche (tercero) puede ser mayor que el especificado, por ejemplo~1.2.3
es equivalente a>=1.2.3 <1.3.0
.– z0r
22 de octubre de 2014 a las 1:03
-
También se puede usar para el número menor (segundo), según las ediciones en línea anteriores.
– XML
27 de junio de 2015 a las 11:32
-
La notación x es intuitiva de leer al principio, pero mucho menos flexible. Por ejemplo,
'1.1.x' === '>=1.1.0' === '~1.1.0'
. El caso 1.1.0 es fácil. Pero la notación x no puede ser granular, como puede'>=1.1.4'
o'~1.1.4'
. Entonces, entonces terminas con'1.1.x'
en un lugar en su lista de dependencia, y'~2.7.3'
en otro lugar. Eso está bien y funciona, pero un desarrollador necesita analizar varias sintaxis para leer una sola lista. Y, si está escribiendo paquetes para configurar la versión mediante programación, desea una sintaxis única. Y, la mayoría de la gente quiere evitar cambios importantes. Por lo tanto, todos los problemas resueltos con~
.– XML
11 de enero de 2016 a las 1:35
-
"angular": "~1.2"
voluntad no partido 1.3, 1.4, 1.4.9. También"angular": "~1"
y"angular": "~1.0"
son no equivalente. prueba usando semver.npmjs.com– Décima
21 de marzo de 2016 a las 14:39
-
Tuve que googlear “grok”. En mi experiencia, no es una palabra que usemos en Australia.
– Clonkex
2 oct 2017 a las 23:54
Residencia en severpuedes usar
-
Rangos de guiones XYZ – ABC
1.2.3-2.3.4
Indica >=1.2.3
-
rangos X
1.2.x
1.X
1.2.*
-
Rangos de tilde
~1.2.3
~1.2
Indica que permite cambios a nivel de parche o cambios de versión menores. -
Intervalos de intercalación ^1.2.3 ^0.2.5 ^0.0.4
Permite cambios que no modifican el dígito distinto de cero más a la izquierda en el [major, minor, patch] tupla
^1.2.x
(significa >=1.2.0^0.0.x
(significa >=0.0.0^0.0
(significa >=0.0.0
-
Gracias por la respuesta sensata y fácil de leer. No tuve que retroceder ni nada, solo boom, ahí está la respuesta. Bien hecho 😉
– toddmo
09/08/2015 a las 19:34
Wilfredo Hughes
Usos de Bower sintaxis de severpero aquí hay algunos ejemplos rápidos:
Puede instalar una versión específica:
$ bower install jquery#1.11.1
Puede usar ~ para especificar ‘cualquier versión que comience con esto’:
$ bower install jquery#~1.11
Puede especificar varios requisitos de versión juntos:
$ bower install "jquery#<2.0 >1.10"
-
Tengo curiosidad sobre el uso práctico de esto. ¿Instalación de ruleta?
– Pensamientos grávidos
17/08/2015 a las 20:36
-
Mirando la respuesta de @XMLilley (y varios documentos) ‘comenzar con’ parece incorrecto, ya que 1.12, 1.13 también estaría bien, siempre que la versión principal no suba …
– Frank N.
10 de enero de 2016 a las 17:15
También puede utilizar el latest
palabra clave para instalar la versión más reciente disponible:
"dependencies": {
"fontawesome": "latest"
}
Si no hay número de parche, ~
es equivalente a agregar .x
a la versión sin tilde. Si hay un número de parche, ~
permite todos los números de parche >= el especificado.
~1 := 1.x
~1.2 := 1.2.x
~1.2.3 := (>=1.2.3 <1.3.0)
No tengo suficientes puntos para comentar sobre la respuesta aceptada, pero parte de la información de la tilde está en desacuerdo con la documentación del servidor vinculado: "angular": "~1.2"
voluntad no partido 1.3, 1.4, 1.4.9. También "angular": "~1"
y "angular": "~1.0"
son no equivalente. Esto se puede verificar con el calculadora npm semver.
Esto podría ser un duplicado de stackoverflow.com/a/19040351/537738
– David
27 de septiembre de 2013 a las 13:27