Mit der Veröffentlichung von npm @ 5 wird nun ein geschrieben, package-lock.json
sofern noch kein npm-shrinkwrap.json
vorhanden ist.
Ich habe npm @ 5 global installiert über:
npm install npm@5 -g
Und jetzt, wenn a npm-shrinkwrap.json
gefunden wird während:
npm install
Eine Warnung wird gedruckt:
npm WARN read-shrinkwrap This version of npm
is compatible with lockfileVersion@1,
but npm-shrinkwrap.json was generated for lockfileVersion@0.
I'll try to do my best with it!
Mein Take-Away ist also, dass ich die Schrumpffolie durch die ersetzen sollte package-lock.json
.
Doch warum gibt es dafür ein neues Format? Was können die package-lock.json
tun, npm-shrinkwrap.json
was nicht?
quelle
package-lock.json
(was nicht möglich ist), wenn Sie diese Bibliothek als Abhängigkeit von einem anderen Paket installierenpackage-lock.json
würden , die Bibliotheken von NPM ignoriert würden. Wenn eine Bibliothek jedoch einenpm-shrinkwrap.json
veröffentlicht und Sie die Bibliothek als Abhängigkeit installieren, installieren Sie auch die genauen Versionen aller in der Bibliothek angegebenen Abhängigkeiten als sekundäre Abhängigkeitennpm-shrinkwrap.json
.npm ci
vorhanden, um die Installation derpackage-lock.json
als schreibgeschützt zu versichern . (npm install
mutiert diepackage-lock.json
verursachende Verwirrung und mögliche Fehler und nutzt diepackage-lock.json
per se nicht aus.)npm ci
behandelt wirdnpm-shrinkwrap.json
undpackage-lock.json
- welche Relevanz hat diese Frage für den Unterschied zwischen den beiden Dateien? Außerdem, nachdem ich herumgelesen habe: Ich denke, dass "npm install
... das nicht ausnutztpackage-lock.json
" seit npm 5.4 falsch ist - ich glaube,npm install
jetzt respektiere ich Sie, espackage-lock
sei denn, es ist völlig inkompatibel mit Ihrempackage.json
. In diesem Fall hat letzteres Vorrang. (Aber ich war ein bisschen außerhalb der JavaScript-Welt - vermisse ich etwas?)Erklärung vom NPM-Entwickler :
quelle
npm-shrinkwrap
ist für genaue node_modules .... Ich nehme an,package-lock.json
ist das Sperren weniger als genau? Und wenn ja, was ist nicht Sperren,npm-shrinkwrap
das sperrt?npm-shrinkwrap
. Wie ich in meiner Antwort feststelle, erfolgt die Konvertierung von apackage-lock.json
in anpm-shrinkwrap.json
buchstäblich nur durch Umbenennen der Datei. Sie sind "der gleiche Code".Ich denke, die Idee war, dass --Save und Shrinkwrap standardmäßig ausgeführt werden, aber mögliche Probleme mit einem Shrinkwrap vermieden werden, wenn es nicht gewünscht wird. Also gaben sie ihm einfach einen neuen Dateinamen, um Konflikte zu vermeiden. Jemand von npm hat es hier ausführlicher erklärt:
https://www.reddit.com/r/javascript/comments/6dgnnq/npm_v500_released_save_by_default_lockfile_better/di3mjuk/
Das entsprechende Zitat:
quelle