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 ?

Großes Geld
quelle
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 .

Mathias Bynens
quelle
@ 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.

Janusz Przybylski
quelle
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.

LJHarb
quelle
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.

Feindealpfa
quelle
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
SridharKritha
quelle
-3

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

Mcanic
quelle
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