¿Hay alguna forma de forzar a npm a generar package-lock.json?

132

Lo borré por accidente y he realizado muchos cambios package.jsondesde entonces. An npm installo npm updateya no genera package-lock.json. Intenté borrar mi caché npm y mi caché nvm, pero parece que nada funciona. Lo probé en varias versiones de Node.js (6.10.3 Node.js - 3.10.10 npm es en lo que me gustaría que funcionara), y no funciona en ninguna.

¿Hay alguna forma de forzar a npm a generar el package-lock.jsonarchivo?

Gran dinero
fuente
2
Creo que package-lock.json es específico para npm 5
Brett Merrifield
3
package-lock.jsonse genera automáticamente por defecto en npm a partir de v5, en las versiones anteriores, el nombre del archivo de bloqueo era npm-shrinkwrap.jsony se generaba manualmente usando npm shrinkwrapcommand.
alexmac
@BrettMerrifield ¡Gracias! Ese era mi problema. Actualicé node 8.6.0y con él npm 5.3.0y funcionó.
Big Money
Compruebe su .gitignore. Accidentalmente tuve package-lock.jsonen el de .gitignorealguna manera y porque package-lock.jsonno aparecía en el git statusme estaba confundiendo.
Joshua Pinter

Respuestas:

155

De forma predeterminada, package-lock.jsonse actualiza cada vez que se ejecuta npm install. Sin embargo, esto se puede desactivar a nivel mundial mediante el establecimiento package-lock=falsede ~/.npmrc.

Cuando la package-lock=falseconfiguración global está activa, aún puede forzar la package-lock.jsonactualización del archivo de un proyecto ejecutando:

npm install --package-lock

Este comando es la única forma infalible de forzar una package-lock.jsonactualización.

Mathias Bynens
fuente
@RonNewcomb ¿Puede compartir más información? ¿Qué quieres decir con "no funciona"? ¿Qué versión de npm estás usando?
Mathias Bynens
npm versión 3.10.10 Nodo 6.10.3 ¿El comando que enumeró parece no ser operativo? No pasa nada. Sin error, sin cambio de archivo, nada.
Ron Newcomb
2
Si está utilizando npm v3 para su proyecto, no tendría un package-lock.json. package-lock.jsonsolo es compatible con npm v5 +.
Mathias Bynens
8
npm v 6.4.1 y esto no crea package-lock.json
mjuopperi
1
Funciona para mí, en 6.4.1. Establecerlo en falso también evita que cree uno.
Kevin B
94

En npm 6.x puede usar

npm i --package-lock-only

Según https://docs.npmjs.com/cli/install.html

El argumento --package-lock-only solo actualizará el package-lock.json, en lugar de verificar node_modules y descargar dependencias.

Janusz Przybylski
fuente
12
Esta es la respuesta correcta ahora, otros son viejos y no funcionarán.
Vaibhav Singh
¿Alguna pista de cómo generar un package-lock.json sin devDependencies? Necesito esto para instalaciones de producción limpias. npm i --package-lock-only --only=productionno parece funcionar.
Robert
No creo que sea posible generar package-lock.jsonsolo para dependencias de producción. Pero si lo ejecuta npm i --only=production, debería instalar solo las dependencias de producción. Entonces, su proceso de compilación podría verse así: instale todas las dependencias, compile la aplicación, elimine node_modulese instale solo las dependencias de producción.
Janusz Przybylski
14

Esto se responde en los comentarios; package-lock.jsones una función en npmv5 y superior. npm shrinkwrapes cómo se crea un archivo de bloqueo en todas las versiones de npm.

LJHarb
fuente
1
tenga en cuenta, sin embargo, que los package-lock.jsons no son exactamente lo mismo que los archivos shrinkwrap.
strugee
7
en npm 5+, son, de hecho, exactamente iguales, hasta el último detalle, excepto por una cosa: npm-shrinkwrap.jsonse publicarán en el registro y package-lock.jsonno.
LJHarb
6
Sí. Sin embargo, esa es una diferencia bastante importante, por lo que dejé mi comentario.
strugee
1
npm shrinkwrapgenera npm-shrinkwrap.json, pero ¿cómo se genera package-lock.json?
Vic
5
Es automático en npm 5+, o puede forzarlo en 5+ con--package-lock
LJHarb
1

Como varias respuestas explicaron, debe ejecutar:

npm i

PERO si no resuelve ...

Verifique la versión de su npmejecutable. (Para mí fue 3.xx que no usa el package-lock.json(en absoluto))

npm -v

Debe ser al menos 5.xx (que introdujo el archivo package-lock.json).

Para actualizar npm en Lunix, siga estas instrucciones.

Para obtener más detalles sobre los archivos del paquete de, lea esta historia del medio .

betontalpfa
fuente
0

Si su versión de npm es inferior a la versión 5 , instale la versión superior para obtener la generación automática de package-lock.json .

Ejemplo: actualice su npm actual a la versión 6.14.0

npm i -g npm@6.14.0

Puede ver la última lista de versiones de npm por

npm view npm versions
SridharKritha
fuente
-3

package-lock.json se vuelve a generar cada vez que ejecuta npm i.

Mcanic
fuente
13
Esto solo es cierto para ciertas versiones de nodey npm. Creo que es npm> = 5.0y node> = 7.0, pero no estoy 100% seguro de eso. No me funciona node 6.11.3.
Thor84no
2
Tampoco es cierto si el bloqueo de paquete se establece en falso en la configuración de npm. Use 'npm config list' para verificar
Damo
package-lock.json se genera automáticamente para cualquier operación en la que npm modifique el árbol node_modules o package.json. Acorde a docs.npmjs.com/files/package-lock.json . Pero la versión npm no está especificada.
NanoNova