Heim >Web-Frontend >js-Tutorial >npm i vs. npm ci
Wir alle kennen uns mit der NPM-Installation aus, aber einige von Ihnen wissen vielleicht nichts über NPM-CI (Neuinstallation). Dieser Befehl ist in CI-Umgebungen sehr nützlich. Die Verwendung von npm ci kann Ihre Build-Pipeline schneller und stabiler machen. Das Erlernen dieser Befehle hilft Ihnen, mehr über die npm-Installation zu verstehen und zu verstehen, warum package-lock.json und package.json so wichtig sind. Wenn Sie diese Grundlagen kennen, erhalten Sie mehr Klarheit.
npm ci ist ein Befehl zum Installieren von Abhängigkeiten in einem Projekt, wobei der Schwerpunkt auf Geschwindigkeit und Konsistenz liegt. Dies ist besonders hilfreich bei Konfigurationen mit kontinuierlicher Integration (CI).
Schnellere Installation:
npm ci überspringt die Aktualisierung von package-lock.json. Es folgt strikt den Abhängigkeiten der Sperrdatei und macht den Prozess schneller und vorhersehbar.
Strikte Sperrdatei:
Es verwendet die genauen Abhängigkeitsversionen in package-lock.json. Wenn zwischen package.json und package-lock.json eine Nichtübereinstimmung besteht, wird ein Fehler ausgegeben. Dadurch wird sichergestellt, dass alle Umgebungen (lokal, CI, Produktion) dieselben Abhängigkeiten verwenden.
Clean Slate:
Vor der Installation löscht npm ci den Ordner „node_modules“, um neu zu beginnen.
Hier ist eine Kurzreferenztabelle, die Ihnen viele verborgene Bereiche erschließt, indem Sie die wichtigsten Unterschiede zwischen npm install und npm ci verstehen:
Schritt | npm install | npm ci |
---|---|---|
1. Abhängigkeitsauflösung | Löst Abhängigkeiten basierend auf package.json und aktualisiert package-lock.json, um alle Änderungen widerzuspiegeln. | Überspringt die Auflösung und verwendet genaue Versionen in package-lock.json, ohne auf package.json für Versionsbereiche zu verweisen. |
2. Versionskompatibilitätsprüfung | Stellt sicher, dass Abhängigkeiten die angegebenen Bereiche in package.json einhalten, und aktualisiert bei Bedarf package-lock.json. | Erfordert, dass die Versionen in package-lock.json genau mit package.json übereinstimmen; schlägt fehl, wenn es nicht synchron ist. |
3. node_modules-Bereinigung | Installiert nur fehlende oder aktualisierte Pakete, ohne node_modules zu entfernen, wobei vorhandene Abhängigkeiten unverändert bleiben. | Löscht node_modules vollständig, bevor alles neu installiert wird. |
4. Sperrdateigenerierung | Generiert eine neue package-lock.json, wenn keine vorhanden ist; Aktualisiert es basierend auf package.json-Änderungen. | Erfordert eine vorhandene package-lock.json und schlägt fehl, wenn sie fehlt oder nicht mit package.json synchronisiert ist. |
5. Mit package.json synchronisieren | Aktualisiert package-lock.json, um es an alle neuen, geänderten oder entfernten Abhängigkeiten in package.json anzupassen. | Erfordert, dass package-lock.json genau mit package.json übereinstimmt; Wenn nicht, schlägt es fehl und gewährleistet eine strikte Versionskonsistenz. |
6. Installation von Abhängigkeiten | Installiert Abhängigkeiten in node_modules basierend auf package.json und aktualisiert package-lock.json mit allen aufgelösten Versionen. | Installiert Abhängigkeiten genau wie in package-lock.json angegeben, stellt die Reproduzierbarkeit sicher und ignoriert Versionsbereiche in package.json. |
7. Sperrdateiänderungen | Ändert package-lock.json automatisch an die Änderungen von package.json. | Ändert package-lock.json nicht, unabhängig von package.json-Änderungen, wodurch die Konsistenz gewahrt bleibt. |
8. Netzwerkanfragen | Ruft alle neuen Abhängigkeiten oder Aktualisierungen ab, die nicht in node_modules gefunden werden. | Ruft nur die in package-lock.json aufgeführten Abhängigkeiten ab und überspringt zusätzliche Prüfungen. |
9. Geschwindigkeit | Langsamer, aufgrund der Abhängigkeitsauflösung, möglicher Sperrdateiaktualisierungen und inkrementeller Installationen. | Schneller, da nur package-lock.json für exakte Installationen verwendet wird, wodurch die Verarbeitung minimiert wird. |
10. Priorität der Dateien | package.json hat Priorität: Abhängigkeiten werden darauf basierend aufgelöst und package-lock.json wird aktualisiert, um alle Änderungen widerzuspiegeln. | package-lock.json hat Priorität: Installationen verwenden exakte Versionen davon und ignorieren package.json, außer um nach Synchronisierungsfehlern zu suchen (fehlgeschlagen, wenn sie nicht übereinstimmen). |
11. Idealer Anwendungsfall | Am besten für die lokale Entwicklung geeignet, wenn Abhängigkeiten geändert oder hinzugefügt werden. | Am besten geeignet für CI/CD-Umgebungen, die Produktion oder immer dann, wenn Konsistenz, Geschwindigkeit und Reproduzierbarkeit von entscheidender Bedeutung sind. |
Das obige ist der detaillierte Inhalt vonnpm i vs. npm ci. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!