Gibt es eine Möglichkeit, npm zu zwingen, package-lock.json zu generieren?


130

Ich habe es versehentlich gelöscht und seitdem viele Änderungen vorgenommen package.json. Ein npm installoder npm updatenicht package-lock.jsonmehr generieren . Ich habe versucht, meinen npm-Cache und meinen nvm-Cache zu löschen, aber nichts scheint zu funktionieren. Ich habe es auf mehreren Versionen von Node.js versucht (6.10.3 Node.js - 3.10.10 npm ist das, woran ich arbeiten möchte), und es funktioniert auf keiner.

Gibt es eine Möglichkeit, npm zum Generieren der package-lock.jsonDatei zu zwingen ?


2
Ich denke, package-lock.json ist spezifisch für npm 5
Brett Merrifield

3
package-lock.jsonwird standardmäßig automatisch in npm ab Version 5 npm-shrinkwrap.jsongeneriert npm shrinkwrap. In früheren Versionen war der Name der Sperrdatei und wurde manuell mit dem Befehl generiert .
Alexmac

@BrettMerrifield Danke! Das war mein problem Ich habe auf node 8.6.0und mit aktualisiert npm 5.3.0und es hat funktioniert.
Big Money

Überprüfen Sie Ihre .gitignore. Ich hatte versehentlich package-lock.jsonin der .gitignoreirgendwie und weil package-lock.jsones nicht in der auftauchte, git statuswarf es mich ab.
Joshua Pinter

Antworten:


151

Wird standardmäßig bei package-lock.jsonjeder Ausführung aktualisiert npm install. Dies kann jedoch global deaktiviert werden , indem package-lock=falsein ~/.npmrc.

Wenn die globale package-lock=falseEinstellung aktiv ist, können Sie package-lock.jsondie Aktualisierung der Projektdatei erzwingen, indem Sie Folgendes ausführen:

npm install --package-lock

Dieser Befehl ist die einzige todsichere Möglichkeit, ein package-lock.jsonUpdate zu erzwingen .


@ RonNewcomb Können Sie weitere Informationen teilen? Was meinst du mit "es funktioniert nicht"? Welche npm-Version verwenden Sie?
Mathias Bynens

npm Version 3.10.10 Knoten 6.10.3 Der von Ihnen aufgeführte Befehl scheint ein No-Op zu sein? Nichts passiert. Kein Fehler, keine Dateiänderung, nichts.
Ron Newcomb

2
Wenn Sie npm v3 für Ihr Projekt verwenden, hätten Sie keine package-lock.json. package-lock.jsonwird nur von npm v5 + unterstützt.
Mathias Bynens

8
npm v 6.4.1 und dies schafft nicht package-lock.json
mjuopperi

1
Es funktioniert für mich in 6.4.1. Wenn Sie es auf false setzen, wird auch verhindert, dass es eines erstellt.
Kevin B

94

In npm 6.x können Sie verwenden

npm i --package-lock-only

Laut https://docs.npmjs.com/cli/install.html

Das Argument --package-lock-only aktualisiert nur die Datei package-lock.json, anstatt node_modules zu überprüfen und Abhängigkeiten herunterzuladen.


12
Dies ist jetzt die richtige Antwort, andere sind alt und funktionieren nicht.
Vaibhav Singh

Gibt es einen Hinweis, wie eine package-lock.json ohne devDependencies generiert werden kann? Ich brauche dies für saubere Produktionsinstallationen. npm i --package-lock-only --only=productionscheint nicht zu funktionieren.
Robert

Ich denke nicht, dass es möglich ist, package-lock.jsonnur für Produktionsabhängigkeiten zu generieren . Wenn Sie es jedoch ausführen npm i --only=production, sollten nur Produktionsabhängigkeiten installiert werden. Ihr Erstellungsprozess könnte also folgendermaßen aussehen: Installieren Sie alle Abhängigkeiten, erstellen Sie eine App, entfernen node_modulesund installieren Sie nur Produktionsabhängigkeiten.
Janusz Przybylski

14

Dies wird in den Kommentaren beantwortet; package-lock.jsonist eine Funktion in npmVersion 5 und höher. npm shrinkwrapSo erstellen Sie eine Sperrdatei in allen Versionen von npm.


1
Beachten Sie jedoch, dass package-lock.jsons nicht genau dasselbe ist wie Shrinkwrap-Dateien.
strugee

7
in npm 5+ sind sie bis ins kleinste Detail genau gleich, bis auf eines: Sie npm-shrinkwrap.jsonwerden in der Registrierung veröffentlicht und package-lock.jsonnicht.
LJHarb

6
Ja. Das ist allerdings ein ziemlich wichtiger Unterschied, weshalb ich meinen Kommentar hinterlassen habe.
strugee

1
npm shrinkwrapgeneriert npm-shrinkwrap.json, aber wie generieren Sie package-lock.json?
Vic

5
Es ist automatisch in npm 5+, oder Sie können es zwingen in 5+ mit--package-lock
LJHarb

1

Wie mehrere Antworten erklärten, sollten Sie Folgendes ausführen:

npm i

ABER wenn es nicht löst ...

Überprüfen Sie die Version Ihrer npmausführbaren Datei. (Für mich war es 3.xx, das package-lock.json(überhaupt) nicht verwendet )

npm -v

Es sollte zumindest 5.xx (das eingeführt , die Paket-lock.json - Datei.)

Befolgen Sie diese Anweisungen, um npm unter Lunix zu aktualisieren .

Für weitere Details lesen Sie bitte diese mittlere Geschichte.


0

Wenn Ihre npm- Version niedriger als Version 5 ist, installieren Sie die höhere Version, um die automatische Generierung von package-lock.json zu erhalten .

Beispiel: Aktualisieren Sie Ihre aktuelle npm auf Version 6.14.0

npm i -g npm@6.14.0

Sie können die Liste der neuesten npm- Versionen von anzeigen

npm view npm versions

-3

package-lock.json wird bei jeder Ausführung neu generiert npm i.


13
Dies gilt nur für bestimmte Versionen von nodeund npm. Ich denke, es ist npm> = 5.0und node> = 7.0, aber da bin ich mir nicht 100% sicher. node 6.11.3Bei mir funktioniert das nicht .
Thor84no

2
Auch nicht wahr, wenn die Paketsperre in der npm-Konfiguration auf false gesetzt ist. Verwenden Sie 'npm Konfigurationsliste', um zu überprüfen
Damo

package-lock.json wird automatisch für alle Vorgänge generiert, bei denen npm entweder den Baum node_modules oder package.json ändert. Entspricht docs.npmjs.com/files/package-lock.json . Die npm-Version ist jedoch nicht angegeben.
NanoNova
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.