node.js - for - instalar bower
¿Cuál es la sintaxis de la versión de bower(y npm)? (5)
Basado en semver , puedes usar
Rangos de guión XYZ - ABC
1.2.3-2.3.4
Indica > = 1.2.3 <= 2.3.4Rangos X
1.2.x 1.X 1.2.*
Tilde Ranges
~1.2.3 ~1.2
Indica que se permiten cambios a nivel de parche o cambios menores en la versión.Rangos de Caret ^ 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 la tupla [mayor, menor, parche]
-
^1.2.x
(significa> = 1.2.0 <2.0.0) -
^0.0.x
(significa> = 0.0.0 <0.1.0) -
^0.0
(significa> = 0.0.0 <0.1.0)
-
Bower me permite especificar los requisitos de versión de los paquetes con la siguiente sintaxis:
"dependencies": {
"<name>": "<version>",
},
Pero no he podido encontrar cuál es la sintaxis que se debe utilizar para la <version>
. Sé que puedo especificar que las versiones 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 superiores a 1.5.0
, etc.
Bower usa la sintaxis de semver , pero aquí hay algunos ejemplos rápidos:
Puedes 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"
En pocas palabras, la sintaxis de los números de versión de Bower (y NPM) se llama SemVer, que es la abreviatura de "Versatización semántica". 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 menciona ~
u otros detalles de sintaxis) en semver.org .
Hay una calculadora de semver visual súper útil con la que 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 las API, lo que ayudará a comprender qué significa la sintaxis. Crucialmente:
Una vez que identifica su API pública, le comunica los cambios con incrementos específicos a 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.
Por lo tanto, su pregunta específica sobre ~
relaciona con ese esquema de Major.Minor.Patch. (Al igual que el operador de careta relacionado ^
). Puede usar ~
para limitar el rango de versiones que está dispuesto a aceptar para:
- los cambios subsiguientes a nivel de parche en la misma versión secundaria ( "correcciones de errores que no afectan la API" ), o:
- cambios subsiguientes de menor nivel en la misma versión principal ( "adiciones / cambios de API compatibles con versiones anteriores" )
Por ejemplo: para indicar que tomará cualquier cambio posterior en el nivel del parche en el árbol de 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 te da los mismos resultados que usando la sintaxis .x
:
"angular": "1.2.x"
Pero, puede usar la sintaxis de tilde / ~
para ser aún más específico: si solo está dispuesto a aceptar cambios a nivel de parche a partir de 1.2.4 , pero aún menos de 1.3.0, usaría:
"angular": "~1.2.4"
Moviéndose a la izquierda, hacia la versión principal , 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 caret se parece mucho a un >
, así que estarías excusado por pensar que significa "cualquier versión superior a 1.0.0". (Ciertamente me he resbalado). ¡No!
Los rangos de caret se usan básicamente para decir que te preocupas solo por el dígito más significativo a la izquierda, generalmente la versión principal, y que permitirás cambios menores o de nivel de parche que no afecten al dígito que está 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 partida menor / parche preciso. Entonces, mientras ^1.0.0 === ~1
, un rango de intercalación como ^1.2.3
permite decir que tomará cualquier cambio >=1.2.3 && <2.0.0
. No se podía hacer eso con un rango de tilde.
Todo eso parece confuso al principio, cuando lo miras de cerca. Pero aléjese por un segundo y piénselo de esta manera: el cursor 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 caret lo que explica por qué las personas las usan mucho más que la sintaxis .x
más simple: simplemente le permiten hacer más. Es por eso que verá que la tilde se usa a menudo, incluso donde serviría .x
. Como ejemplo, vea npm en sí mismo: su propio archivo package.json incluye muchas dependencias en formato ~2.4.0
, en lugar del formato 2.4.x
que podría usar. Al mantener ~
, la sintaxis es consistente en una lista de más de 70 dependencias versionadas, independientemente de qué número de parche inicial sea aceptable.
De todos modos, todavía hay más en SemVer, pero no intentaré detallarlo todo aquí. Compruébelo en el archivo readme del paquete de nodo semver . Y asegúrese de usar la calculadora de versión semántica 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 / rangos de versión no consecutivos (si lo he editado bastante). Sí, puede hacerlo utilizando el doble conducto común "o" operador: ||
. Al igual que:
"angular": "1.2 <= 1.2.9 || >2.0.0"
Si no hay un 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 tilde está en desacuerdo con la documentación de semver vinculada: "angular": "~1.2"
no coincidirá con 1.3, 1.4, 1.4.9. También "angular": "~1"
y "angular": "~1.0"
no son equivalentes. Esto se puede verificar con la calculadora de npm semver .
También puede utilizar la latest
palabra clave para instalar la versión más reciente disponible:
"dependencies": {
"fontawesome": "latest"
}