Versiones Semánticas, palitos y sombreritos

¿Qué es eso del sombrerito (^) o el palito de la ñ (~)? Versión ^0.4.8? wat?

Kilian Cabrera
Calidae Blog
4 min readSep 26, 2018

--

La idea de publicar este post surgió cuando básicamente me di cuenta que no tenía ni idea de como funciona la estructura de versiones en las dependencias de una aplicación. Gran parte de la información la encontré en la web de semver.

Voy a empezar hablando de “major version” , “minor version” y “patch version” en un paquete. wat?

Casi todas las aplicaciones (apps webs, pero también las que tienes en tu móvil, Android, iOS o casi cualquier otro tipo de software) usa números para identificar las versiones de la aplicación.

Cuando uno de estos números cambia es porque hay modificaciones o añadidos en la versión.

Dependiendo del número que haya cambiado, pueden haber sucedido distintas cosas. Como normalmente hay tres números (X.Y.Z), el cambio de cada uno de los números tiene un significado distinto.

Patch version (cambiar la Z)

Cuando hablamos de patch version lo que ocurre es que se ha arreglado un bug o varios bugs.

Ejemplo: 0.5.6 → 0.5.7

Minor version (cambiar la Y)

Por otro lado minor version es cuando se agrega una nueva funcionalidad y además posiblemente se hayan arreglado varios bugs.

Ejemplo: 0.1.0 → 0.2.0. También 0.3.15 → 0.4.0

Major version (cambiar la X)

Por último, major version se refiere a cuando se hacen grandes cambios y no son compatibles con versiones anteriores.

Ejemplo: 0.1.0 → 1.0.0. También 5.3.15 → 6.0.0

Hay gente que hasta les pone nombre a sus mayor versions: Android (AÑADE UN EJEMPLO).

¿Se entiende, no? 😂

Véase en la imagen ↓

Una vez visto el contexto de por qué cambia el número en la versión de un paquete, falta hablar del verdadero motivo por el que he escrito este post.

Instalando dependencias

Cuando estamos trabajando con Javascript en un proyecto y queremos instalar o actualizar dependencias vamos corriendo a ver el package.json para ver si ya está instalada o no. Si no lo está; instalarla.

Por ejemplo:

$ npm install vue

Si la dependencia no esta instalada seguramente te instale la ultima versión estable que tiene disponible. Si hablamos de Vue, actualmente es la versión 2.5.17.

Una vez instalas la dependencia, el package.json marca la versión mínima que acepta el proyecto . Normalmente puede aparecer de tres formas distintas:

“vue”: “^2.5.17”
“vue”: “~2.5.17”
“vue”: “2.5.17”

Si aparece sin ningún símbolo raro delante es que la versión que tendrá instalada siempre será esa concreta, que por diferentes motivos puede ser que interese hacerlo así.

En el caso de que aparezca ^ (sombrerito, surrogate, caret o hat) delante, lo que quiere decir es que acepta instalar versiones dentro de la major version hasta la última. En este caso el major version es 0.X.X. Ejemplo:

^0 significa “cualquier versión dentro de la mayor ‘0’”

En el caso de usar ~ (tilde, palito de la ñ), quiere decir que acepta instalar versiones dentro de la minor version.

~0.4 significa “cualquier versión dentro de la minor ‘0.4’”

Estos casos son los que normalmente se suelen encontrar en los proyectos, pero existen más maneras para instalar o actualizar versiones. Te animo a echarles un vistazo.

npm outdated

Una cosa interesante de ver es cuando ejecutamos el comando npm outdated. Te muestra las dependencias que pueden ser actualizadas fácilmente con colores.

captura de `npm outdated`

El color rojo indica que hay una versión disponible dentro del rango requerido en el package.json por lo que se puede actualizar sin problema.

El color amarillo indica que hay una versión disponible fuera del rango requerido en el package.json por lo que se hay que actualizar a mano y con cuidado.

Free claps! 👏 e_e

Gracias a Adrià Fontcuberta que me animó a escribir este post tan maco.

--

--