Was ist der Unterschied zwischen:
npm install [Paketname]
und:
npm install [Paketname] --save
und:
npm install [Paketname] --save-dev
Was bedeutet das? Und was ist wirklich die Auswirkung der --save
und --dev
Schlüsselwörter?
Was ist der Unterschied zwischen:
npm install [Paketname]
und:
npm install [Paketname] --save
und:
npm install [Paketname] --save-dev
Was bedeutet das? Und was ist wirklich die Auswirkung der --save
und --dev
Schlüsselwörter?
Wie von @andreas-hultgren in dieser Antwort vorgeschlagen und gemäß den npm-Dokumenten:
Wenn jemand plant, Ihr Modul herunterzuladen und in seinem Programm zu verwenden, dann möchte er wahrscheinlich nicht das externe Test- oder Dokumentationsframework herunterladen und erstellen, das Sie verwenden.
Für die Webanwendungsentwicklung platziert jedoch Yeoman (ein Scaffold-Tool, das u. a. eine peer-reviewed, vorgeschriebene package.json-Datei installiert) alle Pakete in devDependencies und nichts in dependencies, daher scheint die Verwendung von --save-dev
in der Webanwendungsentwicklung zumindest eine sichere Wahl zu sein.
--save-dev
wird für Module verwendet, die bei der Entwicklung der Anwendung verwendet werden, die jedoch während des Betriebs in der Produktionsumgebung nicht benötigt werden. --save
wird verwendet, um es in der package.json hinzuzufügen und es ist erforderlich für den Betrieb der Anwendung.
Beispiel: express, body-parser, lodash, helmet, mysql werden alle während des Betriebs der Anwendung verwendet, verwenden Sie --save
, um sie in Abhängigkeiten einzufügen, während mocha, istanbul, chai, sonarqube-scanner alle während der Entwicklung verwendet werden, daher geben Sie diese in dev-Abhängigkeiten.
npm link oder npm install installieren auch die dev-Abhängigkeitsmodule zusammen mit den Abhängigkeitsmodulen in Ihrem Projektordner.
Vollständig lesen und vergessen --save-dev
Kopfschmerzen
Einfachste Antwort ist, dass --save-dev
nützlich ist, wenn Sie Pakete für andere Entwickler erstellen und Ihr Paket auf dem NPM-Register wie lodash, mongoose, express hosten möchten. Wenn Sie einen Node Server erstellen oder schreiben, gibt es keinen Unterschied zwischen --save
und --save-dev
, weil Ihre Node Server-Implementierung privat für Sie ist und Sie ihn nie auf NPM veröffentlichen werden.
Wie funktioniert die NPM-Installation
Immer wenn wir ein neues Paket mit npm wie npm install express installieren, installiert NPM dieses Paket auf unserem System und platziert es in das node_modules-Verzeichnis. Nun analysiert NPM die package.json-Datei des neu installierten Pakets, d.h. express in diesem Fall, nach der Analyse installiert NPM alle Pakete, die im Abhängigkeiten-Abschnitt der package.json-Datei des express-Pakets aufgeführt waren. Nach der Installation der Pakete, von denen express abhängig war, analysiert NPM erneut die package.json-Datei aller neu installierten Pakete und installiert erneut die Pakete für sie. Dieser Zyklus dauert an, bis alle Pakete im node_modules-Verzeichnis verfügbar sind, um ordnungsgemäß zu funktionieren. Sie können die Paketabhängigkeiten überprüfen, indem Sie in der Eingabeaufforderung npm list ausführen, wobei die Eingabeaufforderung auf den Speicherort Ihres Projektverzeichnisses zeigen sollte.
Wie hängt --save-dev
mit den oben erklärten Dingen zusammen
Angenommen, Sie möchten ein neues Paket wie express erstellen. Während der Entwicklung dieses neuen Pakets möchten Sie wahrscheinlich einige Unit-Test-Code schreiben und das Paket mit einem anderen verfügbaren Testpaket testen, nehmen wir an mocha in diesem Fall. Nun wissen Sie, dass mocha nur zum Testen des Pakets erforderlich ist, nicht zum Verwenden des Pakets. In diesem Fall sollten Sie mocha mit dem Flag --save-dev
installieren, da NPM es sonst installieren wird, wenn ein Entwickler Ihr Paket mit NPM installiert. Wenn wir also möchten, dass eine Abhängigkeit nicht installiert wird, wenn jemand unser Paket von NPM installiert, müssen wir dieses Paket während der Entwicklungsphase mit --save-dev
installieren.
Letzte Sache
Verwechseln Sie --save-dev
nicht mit kollaborativer Entwicklung, wenn jemand Ihren Paketcode aus einem Quellversionskontrollsystem wie github geclont hat, wird NPM sicherlich alle devDependencies installieren, also auch das mit --save-dev
installierte Paket.
Wenn Sie ein npm-Paket mit npm install
installieren, installieren Sie es als Abhängigkeit.
Das Paket wird automatisch in der package.json
-Datei unter der Liste dependencies
aufgeführt (ab npm 5: zuvor mussten Sie --save
manuell angeben).
z. B. npm install lodash
Nach dem Drücken der Eingabetaste überprüfen Sie Ihre package.json-Datei.
"dependencies": {
"lodash": "4.x",
},
Wenn Sie die -D
-Flagge oder --save-dev
hinzufügen, installieren Sie sie als Entwicklungsabhängigkeit, die sie der devDependencies
-Liste hinzufügt.
z. B. npm install --save-dev lite-server
Nach dem Drücken der Eingabetaste überprüfen Sie Ihre package.json-Datei.
"devDependencies": {
"lite-server": "^2.6.1"
},
Entwicklungsabhängigkeiten sind nur für die Entwicklung gedachte Pakete, die in der Produktion nicht benötigt werden. Zum Beispiel Testpakete, Webpack oder Babel.
Wenn Sie in die Produktion gehen und npm install
eingeben und der Ordner eine package.json
-Datei enthält, werden sie installiert, da npm davon ausgeht, dass dies ein Entwicklungsdepoy ist.
Sie müssen die --production
-Flagge setzen (npm install --production
), um diese Entwicklungsabhängigkeiten zu vermeiden.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.