npm 5 fue lanzado hoy y una de las nuevas características incluye instalaciones deterministas con la creación de un archivo package-lock.json
.
¿Se supone que este archivo se mantiene en el control de código fuente?
Asumo que es similar a yarn.lock
y composer.lock
, los cuales se supone que se mantienen en el control de código.
Sí, package-lock.json
está pensado para ser comprobado en el control de fuentes. Si está usando npm 5, puede ver esto en la línea de comandos: created a lockfile as package-lock.json. Debería confirmar este archivo.
Según npm help package-lock.json
:
package-lock.json
se genera automáticamente para cualquier operación en la que npm modifica el árbolnode_modules
opackage.json
. Describe el árbol exacto que se generó, de forma que las instalaciones posteriores puedan generar árboles idénticos, independientemente de las actualizaciones intermedias de las dependencias.
Este archivo está destinado a ser enviado a los repositorios de fuentes**, y sirve para varios propósitos:
- Describir una única representación de un árbol de dependencias tal que los compañeros de equipo, los despliegues y la integración continua están garantizados para instalar exactamente las mismas dependencias.
Proporcionar una facilidad para que los usuarios puedan "viajar en el tiempo" a estados anteriores de
node_modules
sin tener que confirmar el directorio en sí.
- Facilitar una mayor visibilidad de los cambios en el árbol a través de diffs de control de fuentes legibles.
- Y optimizar el proceso de instalación permitiendo a npm saltarse las resoluciones de metadatos repetidas para los paquetes previamente instalados.
Un detalle clave sobre
package-lock.json
es que no puede ser publicado, y será ignorado si se encuentra en cualquier lugar que no sea el paquete de nivel superior. Comparte un formato con npm-shrinkwrap.json(5), que es esencialmente el mismo archivo, pero permite la publicación. Esto no se recomienda a menos que se despliegue una herramienta CLI o que utilice el proceso de publicación para producir paquetes de producción.
Si tanto
package-lock.json
comonpm-shrinkwrap.json
están presentes en la raíz de un paquete,package-lock.json
será completamente ignorado.
Sí, puede confirmar este archivo. De los docs oficiales de npm:
package-lock.json
se genera automáticamente para cualquier operación en la quenpm
modifique el árbolnode_modules
, opackage.json
. Describe el árbol exacto que se generó, de forma que las instalaciones posteriores puedan generar árboles idénticos, independientemente de las actualizaciones de dependencias intermedias.Este archivo está pensado para ser enviado a los repositorios de fuentes[.]