Ich arbeite mit kontinuierlicher Integration und habe den Befehl npm ci entdeckt.
Ich kann mir nicht vorstellen, welche Vorteile die Verwendung dieses Befehls für meinen Workflow hat.
Ist es schneller Erschwert es den Test, okay, und danach?
Aus dem npm docs :
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-Datei 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. Einzelne Abhängigkeiten können mit diesem Befehl nicht 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 Paketsperren geschrieben: Installationen sind im Wesentlichen eingefroren.
Im Wesentlichen liest npm install
_package.json
_, um eine Liste von Abhängigkeiten zu erstellen, und verwendet _package-lock.json
_, um anzugeben, welche Versionen davon vorhanden sind Abhängigkeiten zu installieren. Wenn eine Abhängigkeit nicht in _package-lock.json
_ enthalten ist, wird sie durch _npm install
_ hinzugefügt.
npm ci
(benannt nach C ontinuous I ntegration) installiert Abhängigkeiten direkt von _package-lock.json
_ und verwendet _package.json
_, um nur zu überprüfen, ob keine nicht übereinstimmenden Versionen vorhanden sind. Wenn Abhängigkeiten fehlen oder inkompatible Versionen haben, wird ein Fehler ausgegeben .
Verwenden Sie _npm install
_, um neue Abhängigkeiten hinzuzufügen und Abhängigkeiten in einem Projekt zu aktualisieren. Normalerweise wird es während der Entwicklung nach dem Abrufen von Änderungen verwendet, die die Liste der Abhängigkeiten aktualisieren. In diesem Fall ist es jedoch möglicherweise sinnvoll, _npm ci
_ zu verwenden.
Verwenden Sie _npm ci
_, wenn Sie einen deterministischen, wiederholbaren Build benötigen. Zum Beispiel bei kontinuierlicher Integration, automatisierten Jobs usw. und bei der erstmaligen Installation von Abhängigkeiten anstelle von _npm install
_.
npm install
npm-shrinkwrap.json
_ und _package-lock.json
_ (in dieser Reihenfolge) gesteuert.node_modules
_.package.json
_ oder _package-lock.json
_ schreiben. npm i packagename
_) wird möglicherweise in _package.json
_ geschrieben, um die Abhängigkeit hinzuzufügen oder zu aktualisieren.npm i
_) wird möglicherweise in _package-lock.json
_ geschrieben, um die Version einiger Abhängigkeiten zu sperren, wenn sie nicht bereits in dieser Datei enthalten sind.npm ci
package-lock.json
_ oder _npm-shrinkwrap.json
_ vorhanden ist.package.json
_ übereinstimmen.node_modules
_ und installiert alle Abhängigkeiten gleichzeitig.package.json
_ oder _package-lock.json
_ geschrieben.Während _npm ci
_ den gesamten Abhängigkeitsbaum aus _package-lock.json
_ oder _npm-shrinkwrap.json
_ generiert, aktualisiert _npm install
_ den Inhalt von _node_modules
_ mit dem folgenden Algorithmus ( Quelle ):
_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 ci
löscht alle vorhandenen node_modules-Ordner und verwendet die package.lock
-Datei, um die spezifische Version jedes Pakets zu installieren. Es ist bedeutend schneller als die Installation von npm, da einige Funktionen übersprungen werden. Die saubere Installation eignet sich hervorragend für CI/CD-Pipelines und Docker-Builds! Sie verwenden es auch, um alles auf einmal und nicht bestimmte Pakete zu installieren.
Die Dokumentation, die Sie verlinkt haben, hatte die Zusammenfassung:
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-Datei 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. Einzelne Abhängigkeiten können mit diesem Befehl nicht 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 Paketsperren geschrieben: Installationen sind im Wesentlichen eingefroren.