node.js - descargar - ¿Cuál es la diferencia entre hryn.lock y npm''s shrinkwrap?
npm version syntax (2)
Hay alguna diferencia entre ellos
Yarn sigue un algoritmo más determinista, en comparación con npm shrinkwrap
. Si estás usando Hilo, seguir usando envoltura de contracción sería contrario a la intuición
Puede encontrar esto en la documentación de yarn.lock
:
Es similar al npm-shrinkwrap.json de npm, sin embargo no tiene pérdidas y crea resultados reproducibles
Sin embargo, la pregunta sigue siendo si el hilo está listo para la producción. Todavía hay un montón de errores evidentes abiertos en el repositorio de GitHub, así que esperaría un mes más o menos.
Recientemente intenté instalar mis paquetes Node con Yarn. Funciona muy bien y es mucho más rápido que NPM. El hilo genera automáticamente yarn.lock
. Ya tenemos NPM shrinkwrap ( npm-shrinkwrap.json
).
¿Hay alguna diferencia entre ellos? ¿Tiene yarn.lock
tiene alguna ventaja sobre npm-shrinkwrap.json?
El archivo yarn.lock
es bastante similar a los archivos de bloqueo de otros gestores de paquetes, especialmente el administrador de paquetes de Rust''s Cargo, que tiene Cargo.lock
. La idea de estos archivos de bloqueo es representar un conjunto consistente de paquetes que siempre debería funcionar.
npm
almacena rangos de dependencia en el archivo package.json
, lo que significa que cuando alguien instala su paquete, pueden obtener un conjunto diferente de dependencias, ya que puede estar ejecutando paquetes desactualizados (aunque todavía satisfacen el rango de dependencia que especificó). Tomemos, por ejemplo, a alguien que haya especificado la dependencia "foo": "^1.0.0"
. Es posible que realmente hayan instalado foo v1.0.1, porque fue la última vez que npm install
, pero más adelante, alguien instala su paquete y obtiene la dependencia foo v1.1.0. Esto podría romper algo inesperadamente, lo que se puede evitar si tiene un archivo yarn.lock
que garantice una resolución consistente del paquete .
En cuanto a la comparación con npm shrinkwrap
, la documentación lo explica muy claramente:
Es similar al npm-shrinkwrap.json de npm, sin embargo no tiene pérdidas y genera resultados reproducibles.
La documentación también recomienda el yarn.lock
de yarn.lock
a sus repositorios, si aún no lo hace, para que pueda cosechar los beneficios de la resolución del paquete consistente y reproducible. Esta pregunta también explica más por qué deberías hacer esto.
El comportamiento con pérdida de npm shrinkwrap
se debe a los algoritmos no deterministas utilizados por npm
sí; como se indica en los comentarios de otra respuesta, npm shrinkwrap
> npm install
> npm shrinkwrap
no garantiza que produzca el mismo resultado que solo shrinkwrapping una vez, mientras que Yarn usa explícitamente "un algoritmo de instalación que es determinista y confiable" .