Versiones de las dependencias

Versionado Semántico

Paquetes en Yarn siguen Versionado semántico, también conocido como “semver”. Cuando se instala un nuevo paquete del registro que se añadirá a tu package.json con una gama de versión semver.

Estas versiones se dividen en major.minor.patch y se parece a uno de estos: 3.14.1, 0.42.0, 2.7.18. Cada parte de la versión se incrementa en diversos momentos:

  • Cambio incremento importante major al realizar un cambio que rompe con la versión anterior breaking o incompatible a la API de un paquete.
  • Incremento menor minor cuando se agrega nueva funcionalidad mientras sigue siendo compatible con versiones anteriores backwards-compatible
  • Incremento parche patch cuando haces correcciones mientras siga siendo compatible backwards-compatible

Nota: Hay también a veces “etiquetas” o “extensiones” para el formato semver que marcan cosas como versiones o versiones beta (p. ej. 2.0.0-beta.3)

Cuando los desarrolladores hablan sobre dos versiones de semver “compatible” una con la otra se refieren a los cambios compatibles (menores y parche).

Rangos de versión

Cuando desees especificar una dependencia especifica solo necesitas su nombre y un rango de versión en su package.json como uno de estos:

{
  "dependencies": {
    "package-1": ">=2.0.0 <3.1.4",
    "package-2": "^0.4.2",
    "package-3": "~2.7.1"
  }
}

Te darás cuenta de que tenemos un montón de caracteres de la versión. Estos caracteres, > =, <, ^ y ~, son los operadores y se utilizan para especificar rangos de versión.

El propósito de un rango de versión es especificar las versiones de una dependencia con la que funcionara en tu código.

Comparadores

Cada rango de versión se compone de comparadores. Estos comparadores son simplemente un operador seguido de una versión. Éstos son algunos de los operadores básicos:

Comparador Descripción
<2.0.0 Cualquier versión menor 2.0.0
<=3.1.4 Cualquier versión que sea menor o igual a 3.1.4
>0.4.2 Cualquier versión superior a 0.4.2
>=2.7.1 Cualquier versión que es mayor o igual a 2.7.1
=4.6.6 Cualquier versión que es igual a 4.6.6

Nota: Si no se especifica ningún operador, entonces = se asume en la gama de la versión. Así que el operador = es efectivamente opcional.

Intersecciones

Los comparadores se pueden acompañar por espacios en blanco para crear un comparador situado. Esto crea una intersección de los comparadores que incluye. Por ejemplo, definido el comparador > = 2.0.0 < 3.1.4 significa “Mayor o igual a 2.0.0 y menor 3.1.4".

Uniones

Un rango completo de una versión puede incluir una Unión de varios conjuntos de comparadores reunidos por ||. Si se satisface cualquiera de los lados de la Unión, se satisface el rango entero de la versión. Por ejemplo, el rango de la versión < 2.0.0 || > 3.1.4 significa “Menor 2.0.0 o superior 3.1.4".

Etiquetas pre-producción

Versiones pueden tener etiquetas de pre-producción (por ejemplo, 3.1.4-beta.2). Si un comparador incluye una versión con una etiqueta de versión previa, sólo se igualará con versiones que tienen la misma versión de major.minor.patch.

Por ejemplo, el rango > = 3.1.4-beta.2 correspondería con 3.1.4-beta.2 o 3.1.4-beta.12, pero no entraria 3.1.5-beta.1 lo haría aunque es técnicamente “mayor o igual a” (> =) la versión de 3.1.4-beta.2.

Versiones de pre-producción tienden a contener cambios de última hora accidental y generalmente no quieren coincidir con versiones fuera de la versión que has especificado para que este comportamiento sea útil.

Rangos de versión avanzados

Rangos de guión

Rangos de guión (e.j. 2.0.0 - 3.1.4) especificados por un sistema inclusivo. Si se deja parte de la versión (por ejemplo, 0.4 o 2) se llenan con ceros.

Rangos de versión Rangos de versión ampliada
2.0.0 - 3.1.4 >=2.0.0 <=3.1.4
0.4 - 2 >=0.4.0 <=2.0.0
Rangos de X

X, x, o * puede utilizarse para dejar todo o parte de una versión no especificada.

Rangos de versión Rangos de versión ampliada
* >=0.0.0 (cualquier versión)
2.x >=2.0.0 <3.0.0 (coincide con la versión principal)
3.1.x >=3.1.0 <3.2.0 (coincide con la versión mayor y menor)

Si parte de una versión se deja hacia fuera, se supone que es un rango de x.

Rangos de versión Rangos de versión ampliada
`` (cadena vacía) * o >=0.0.0
2 2.x.x o >=2.0.0 <3.0.0
3.1 3.1. x o >=3.1.0 <3.2.0
Rangos de tilde

~ Con una versión menor especificada, se permiten cambios de parche. Usando ~ con una versión única especificada permitirá cambios de menor importancia.

Rangos de versión Rangos de versión ampliada
~3.1.4 >=3.1.4 <3.2.0
~3.1 3.1. x o >=3.1.0 <3.2.0
~3 3.x o >=3.0.0 <4.0.0

Nota: Especificando versiones en rangos de tilde sólo coincidirá con versiones en esa misma versión completa. Por ejemplo, el rango de versión ~3.1.4-beta.2 con 3.1.4-beta.4 pero no 3.1.5-beta.2 porque la versión de major.minor.patch es diferente.

Rangos de símbolo de intercalación

Permite cambios que no modifican el primer dígito distinto de cero en la versión, tampoco 3.1.4 el 3 o el 4 en 0.4.2.

Rangos de versión Rangos de versión ampliada
^3.1.4 >=3.1.4 <4.0.0
^0.4.2 >=0.4.2 <0.5.0
^0.0.2 >=0.0.2 <0.0.3

Nota: Por defecto cuando se ejecuta yarn add [package-name] utilizará un rango de símbolo de intercalación.

Si parte de la versión se deja hacia fuera, las partes que faltan se rellenan con ceros. Sin embargo, todavía se permite que ese valor sea cambiado.

Rangos de versión Rangos de versión ampliada
^0.0.x >=0.0.0 <0.1.0
^0.0 >=0.0.0 <0.1.0
^0.x >=0.0.0 <1.0.0
^0 >=0.0.0 <1.0.0

Más recursos

  • Para una especificación completa de cómo funciona este sistema de control de versiones vea el node-semver README.
  • Prueba este sistema de control de versiones en los paquetes reales usando el npm semver calculator.