Caret vs Tilde en package.json

    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!

     

    Etiquetas:

    Deja una respuesta

    Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *