Aus den npm-Dokumenten :
Kurz gesagt, die Hauptunterschiede zwischen der Verwendung von npm install und npm ci sind:
- Das Projekt muss über eine vorhandene package-lock.json oder npm-shrinkwrap.json verfügen.
- Wenn die Abhängigkeiten in der Paketsperre nicht mit denen in package.json übereinstimmen, wird npm ci mit einem Fehler beendet, anstatt die Paketsperre zu aktualisieren.
- npm ci kann nur ganze Projekte gleichzeitig installieren: Mit diesem Befehl können keine einzelnen Abhängigkeiten hinzugefügt werden.
- Wenn ein node_modules bereits vorhanden ist, wird es automatisch entfernt, bevor npm ci mit der Installation beginnt.
- Es wird niemals in package.json oder eine der Paket-Sperren geschrieben: Installationen werden im Wesentlichen eingefroren.
npm install
Liest package.json
im Wesentlichen,
um eine Liste von Abhängigkeiten zu erstellen, und verwendet package-lock.json
, um zu informieren, welche Versionen dieser Abhängigkeiten installiert werden sollen. Wenn eine Abhängigkeit nicht vorhanden ist package-lock.json
, wird sie von hinzugefügtnpm install
.
npm ci
(benannt nach C ontinuierliche I ntegration) installiert Abhängigkeiten direkt aus package-lock.json
und verwendet package.json
nur zu bestätigen , dass es keine nicht übereinstimmen Versionen.Wenn Abhängigkeiten fehlen oder inkompatible Versionen haben, wird ein Fehler ausgegeben .
Verwenden Sie npm install
diese Option , um neue Abhängigkeiten hinzuzufügen und Abhängigkeiten zu einem Projekt zu aktualisieren. Normalerweise verwenden Sie es während der Entwicklung, nachdem Sie Änderungen vorgenommen haben, mit denen die Liste der Abhängigkeiten aktualisiert wird. Es kann jedoch eine gute Idee sein, es zu verwendennpm ci
wird. In diesem Fall ist .
Verwenden npm ci
Sie diese Option, wenn Sie einen deterministischen, wiederholbaren Build benötigen. Zum Beispiel während der kontinuierlichen Integration, automatisierten Jobs usw. und bei der erstmaligen Installation von Abhängigkeiten anstelle von npm install
.
- Installiert ein Paket und alle seine Abhängigkeiten.
- Abhängigkeiten werden von
npm-shrinkwrap.json
und gesteuertpackage-lock.json
(in dieser Reihenfolge) .
- ohne Argumente : Installiert Abhängigkeiten eines lokalen Moduls.
- Kann globale Pakete installieren.
- Installiert fehlende Abhängigkeiten in
node_modules
.
- Es kann an
package.json
oder schreibenpackage-lock.json
.
- Bei Verwendung mit einem Argument (
npm i packagename
) kann es schreibenpackage.json
, um die Abhängigkeit hinzuzufügen oder zu aktualisieren.
- Bei Verwendung ohne Argumente kann (
npm i
) geschrieben werden, package-lock.json
um die Version einiger Abhängigkeiten zu sperren, wenn sie nicht bereits in dieser Datei enthalten sind.
- Benötigt mindestens npm v5.7.1 .
- Benötigt
package-lock.json
odernpm-shrinkwrap.json
anwesend sein.
- Wirft einen Fehler aus, wenn die Abhängigkeiten von diesen beiden Dateien nicht übereinstimmen
package.json
.
- Entfernt
node_modules
und installiert alle Abhängigkeiten gleichzeitig.
- Es schreibt nie an
package.json
oder package-lock.json
.
Algorithmus
Während der npm ci
Generierung des gesamten Abhängigkeitsbaums aus package-lock.json
oder npm-shrinkwrap.json
, wird npm install
der Inhalt dernode_modules
Verwendung des folgenden Algorithmus ( Quelle ) aktualisiert :
load the existing node_modules tree from disk
clone the tree
fetch the package.json and assorted metadata and add it to the clone
walk the clone and add any missing dependencies
dependencies will be added as close to the top as is possible
without breaking any other modules
compare the original tree with the cloned tree and make a list of
actions to take to convert one to the other
execute all of the actions, deepest first
kinds of actions are install, update, remove and move
npm install
auf package.json schreiben kann. Wissen Sie, was es hier schreiben könnte?