Caret vs Tilde en package.json

C

El archivo package.json es el corazón de todos los paquetes npm y no importa lo que tenga en su proyecto, una cosa es segura: siempre habrá un archivo package.json. De las muchas cosas contenidas en el archivo package.json, la gestión de la dependencia es de lo que vamos a hablar hoy.

Creo que la mayoría de los desarrolladores estarían de acuerdo en que la gestión de dependencias nunca fue una tarea fácil en los primeros días de lenguajes de alto nivel como JavaScript. Pregúntele a un desarrollador de Java cómo era la vida antes de que apareciera Maven; o tal vez hablar con un desarrollador de Ruby sobre el impacto que tiene RubyGems en su desarrollo. Lo mismo ocurre con los desarrolladores de Node.js. Sin la gestión de dependencias de npm y package.json, la vida no sería tan fácil.

Carets y Tildes en números de versión

Dentro de cada proyecto respaldado por npm, las dependencias se controlan y administran dentro de un archivo package.json a través de la propiedad JSON “dependencias”. Normalmente, estas dependencias son bastante sencillas y fáciles de entender. Aunque ocasionalmente puede notar cambios en los números de versión después de usar el --save opción en package.json. Mirándolo más a fondo, es posible que vea que los números de versión ahora tienen un carácter desconocido delante de ellos.

Específicamente, podrías terminar con algo como:

"dependencies": {
  "express": "^3.9.2"
}

U otra posibilidad es:

"dependencies": {
  "express": "~3.9.2"
}

Entonces, ¿qué está haciendo este personaje “^” (o el “~”) ahí arriba? No se preocupe, es bastante simple e intentaré explicarlo.

Los caracteres que vienen antes de los números de versión son prefijos a los que nos referimos como signos de intercalación (^) y tilde (~). Los desarrolladores (o npm) los agregan a indicar restricciones sobre qué números de versión de software se pueden usar como dependencia en su proyecto. Estos esquemas numéricos siguen una convención conocida como control de versiones semánticoo semver. Los números reales en sí mismos se utilizan en el sistema de control de versiones para indicar el tipo de cambios realizados que llevaron al aumento del número de versión. Los números (3, 9 y 2) del ejemplo anterior se denominan números mayores, menores y de parche de izquierda a derecha.

Antes de entrar en los detalles de lo que realmente significan el signo de intercalación y la tilde, veamos una descripción general rápida de cuándo cada uno de los dígitos en los números de versión debe incrementarse a medida que se realizan cambios en un código base:

  • Los cambios incompatibles hacia atrás incrementan el mayor dígito.
  • Si se realiza un cambio nuevo (compatible con versiones anteriores), menor se incrementa el dígito.
  • Las correcciones de errores simples (a la funcionalidad existente) aumentan la parche dígito.

Cuando ejecutas npm install en un directorio de proyecto limpio, la versión de software más alta disponible para una dependencia que puede satisfacer el número de versión dado en package.json se instala para cada dependencia. Entonces, si no se proporciona ^ o ~, se usa el número de versión exacto dado.

Sin embargo, al no especificar la versión de dependencia precisa en el archivo package.json y usar los signos de intercalación (^) o tilde (~), npm le permite ampliar el rango de versiones aceptadas. Cuando el --save se utiliza la bandera, la funcionalidad predeterminada es prefijar la versión con el signo de intercalación. Y, por supuesto, esto se puede configurar con el parámetro save-prefix.

Con respecto al control de versiones semántico, aquí hay un desglose de los cambios en la base de código que permitirá el signo de intercalación:

Signo de intercalación permite …

  • Nuevas funcionalidades compatibles con versiones anteriores
  • Refactor interno grande
  • Corrección de errores
  • Desaprobación de la funcionalidad anterior (que aún está operativa)

Con el símbolo de intercalación puede obtener versiones como 3 .., donde los caracteres * coincidirán con el número de versión más alto disponible. Por lo tanto, los cambios en el dígito mayor, como 4.0.0, no se utilizarán en este caso.

Tilde permite …

  • Corrección de errores

Con tilde, puede obtener versiones como 3.9. *. Solo se permiten las últimas correcciones de errores con la tilde.

Entonces podemos concluir diciendo que el carácter ~ debe usarse si desea bloquear el número de parche. Debe usar esto cuando esté listo para aceptar solo correcciones de errores y no quiera enfrentar ninguna alteración posiblemente incompatible. Por otro lado, el carácter ^ es responsable de bloquear el parche y los números de versión menor. Debe usarse cuando desee tener una nueva funcionalidad compatible con versiones anteriores, así como correcciones de errores.

Conclusión

Tenga en cuenta que las versiones muy antiguas de npm no son compatibles con ^, así que utilícelo con precaución. Aunque, cualquiera de las versiones de npm lanzadas en el último año debería estar bien. En la mayoría de los casos, esto no debería afectarle.

Realmente no hay una “mejor opción” aquí, ya que ambos tienen sus usos en diferentes escenarios. Todo depende de los requisitos de su proyecto y de sus preferencias personales. El solo hecho de conocer esta función en semver y npm puede ahorrarle muchos dolores de cabeza, así como algo de tiempo al evitar que tenga que actualizar constantemente sus versiones de dependencia.

¿Tiene una opción preferida? ¿Ha tenido una mala experiencia con el uso del símbolo de intercalación o la tilde? ¡Háznoslo saber en los comentarios!

 

About the author

Ramiro de la Vega

Bienvenido a Pharos.sh

Soy Ramiro de la Vega, Estadounidense con raíces Españolas. Empecé a programar hace casi 20 años cuando era muy jovencito.

Espero que en mi web encuentres la inspiración y ayuda que necesitas para adentrarte en el fantástico mundo de la programación y conseguir tus objetivos por difíciles que sean.

Add comment

Sobre mi

Últimos Post

Etiquetas

Esta web utiliza cookies propias para su correcto funcionamiento. Al hacer clic en el botón Aceptar, aceptas el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad