Benötige ich sowohl package-lock.json als auch package.json?

149

Nachdem ich meinen NPM auf die neueste Version (von 3.X auf 5.2.0) aktualisiert und in npm installeinem vorhandenen Projekt ausgeführt habe, erhalte ich eine automatisch erstellte package-lock.jsonDatei.

Ich kann sagen, package-lock.jsongibt mir einen genauen Abhängigkeitsbaum im Gegensatz zu package.json.

Allein aufgrund dieser Informationen scheint package.jsones überflüssig zu sein und wird nicht mehr benötigt.

Sind beide notwendig, damit NPM funktioniert?
Ist es sicher oder möglich, nur die package-lock.jsonDatei zu verwenden?

In den Dokumenten auf package-lock.json ( doc1 , doc2 ) wird nichts darüber erwähnt.

Bearbeiten :

Nach einigem Nachdenken kam ich zu dem Schluss, dass jemand, der Ihr Projekt mit einer älteren Version von NPM (vor 5.x) verwenden möchte, immer noch alle Abhängigkeiten installiert, jedoch mit weniger genauen Versionen (Patch-Versionen).

Omri Luzon
quelle
3
Link
Lakshmipriya Mukundan

Antworten:

103

Benötigen Sie beide package-lock.jsonund package.json? Nein .

Benötigen Sie das package.json? Ja .

Können Sie ein Projekt nur mit dem haben package-lock.json? Nein .

Das package.jsonwird nicht nur für Abhängigkeiten verwendet - wie zum Beispiel zum Definieren von Projekteigenschaften, Beschreibungen, Autoren- und Lizenzinformationen, Skripten usw. Das package-lock.jsonwird ausschließlich zum Sperren von Abhängigkeiten an eine bestimmte Versionsnummer verwendet.

Markus Stefanko
quelle
19

package-lock.json: Zeichnet die genaue Version jedes installierten Pakets auf, mit der Sie sie erneut installieren können. Zukünftige Installationen können einen identischen Abhängigkeitsbaum erstellen.

package.json: Zeichnet die Mindestversion auf, die Ihre App benötigt. Wenn Sie die Versionen eines bestimmten Pakets aktualisieren, wird die Änderung hier nicht berücksichtigt.

Narendar Reddy M.
quelle
1
Wenn das oben package.jsonGesagte zutrifft und die von der App benötigte Mindestversion und package-lock.json die genaue Version jedes installierten Pakets aufzeichnet, tritt eine seltsame Situation auf, in der ein Modul im Paket auf Version 0.112.1 eingestellt ist .json und 0.110.0 in package-lock.json ...
Jean-François Beauchamp
6

Wenn Ihre Frage lautet, ob die Sperrdatei für Ihre Quellcodeverwaltung festgeschrieben werden soll, sollte dies der Fall sein. Es wird unter bestimmten Umständen ignoriert.

Ich habe festgestellt, dass Pull-Anforderungen und Commit-Verlauf aufgebläht sind. Wenn sich dies ändert, führen Sie ein separates Commit dafür durch.

Stanley Kirdey
quelle
1
Nein, ich habe nicht nach Verpflichtungen zur Quellcodeverwaltung gefragt. Nur wenn NPM beide gleichzeitig zum Arbeiten benötigt. package-lock.jsonscheint eine ausführlichere Version von zu sein package.json, ist es also sicher oder möglich, nur die Sperrdatei zu verwenden.
Omri Luzon
Ich sehe, ich habe package.json in meinen Projekten verlassen, hauptsächlich um einen Platz für npm-Skripte zu haben.
Stanley Kirdey
1
Es gibt jetzt eine separate Frage, ob die package-lock.jsonVersionskontrolle durchgeführt werden soll.
Adrian W
0

Eine genauere und detailliertere Erklärung des Grundes für die Beibehaltung von package-lock.json finden Sie hier

Vivek Goel
quelle