¿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?


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.


@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.


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.


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 .


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

-3

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


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.