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?
Der Unterschied zwischen --save
und --save-dev
ist möglicherweise nicht sofort erkennbar, wenn Sie sie beide in Ihren eigenen Projekten ausprobiert haben. Hier sind also ein paar Beispiele...
Angenommen, Sie würden eine App erstellen, die das moment-Paket verwendet, um Daten zu parsen und anzuzeigen. Ihre App ist ein Terminplaner, daher benötigt sie dieses Paket wirklich zum Ausführen, als in: kann ohne es nicht ausgeführt werden. In diesem Fall würden Sie verwenden
npm install moment --save
Dies würde einen neuen Wert in Ihrer package.json erstellen
"dependencies": {
...
"moment": "^2.17.1"
}
Wenn Sie entwickeln, ist es wirklich hilfreich, Tools wie Test-Suites zu verwenden und möglicherweise jasmine-core und karma zu benötigen. In diesem Fall würden Sie verwenden
npm install jasmine-core --save-dev
npm install karma --save-dev
Dies würde ebenfalls einen neuen Wert in Ihrer package.json erstellen
"devDependencies": {
...
"jasmine-core": "^2.5.2",
"karma": "^1.4.1",
}
Sie benötigen die Test-Suite nicht, um die App im Normalzustand auszuführen, daher handelt es sich um eine --save-dev
-Art von Abhängigkeit, nichts weiter. Sie können sehen, wie es ein wenig schwer vorstellbar ist, wenn Sie nicht verstehen, was wirklich passiert.
Direkt aus den NPM-Dokumenten docs#dependencies
Abhängigkeiten
Abhängigkeiten werden in einem einfachen Objekt angegeben, das einen Paketnamen mit einem Versionsbereich verknüpft. Der Versionsbereich ist ein String, der eine oder mehrere durch Leerzeichen getrennte Beschreibungen enthält. Abhängigkeiten können auch durch einen Tarball oder eine Git-URL identifiziert werden.
Bitte setzen Sie keine Test-Harnesses oder Transpiler in Ihr Abhängigkeiten-Objekt. Siehe devDependencies, unten.
Selbst in den Dokumenten wird empfohlen, --save-dev
für Module wie Test-Harnesses zu verwenden.
Standardmäßig installiert NPM einfach ein Paket unter node_modules. Wenn Sie die Abhängigkeiten für Ihre App/Modul installieren möchten, müssen Sie sie zuerst installieren und dann dem Abschnitt dependencies
Ihrer package.json
hinzufügen.
--save-dev
fügt das Paket eines Drittanbieters zu den Entwicklungssabhängigkeiten des Pakets hinzu. Es wird nicht installiert, wenn jemand direkt npm install
ausführt, um das Paket zu installieren. Es wird in der Regel nur installiert, wenn jemand zuerst Ihr Quellrepository klont und dann npm install
darin ausführt.
--save
fügt das Paket eines Drittanbieters zu den Abhängigkeiten des Pakets hinzu. Es wird zusammen mit dem Paket installiert, wenn jemand npm install paket
ausführt.
Entwicklungsabhängigkeiten sind die Abhängigkeiten, die nur für die Entwicklung des Pakets benötigt werden. Dazu gehören Testläufer, Compiler, Packager, etc. Beide Arten von Abhängigkeiten werden in der package.json
Datei des Pakets gespeichert. --save
fügt sie zu dependencies
hinzu, --save-dev
fügt sie zu devDependencies
hinzu.
npm install Dokumentation kann hier eingesehen werden.
--
Bitte beachten Sie, dass --save
jetzt die Standardoption ist, seit NPM 5. Daher ist es nicht mehr explizit erforderlich. Es ist möglich, npm install
ohne --save
auszuführen, um das gleiche Ergebnis zu erzielen.
Lass mich dir ein Beispiel geben,
jest
zum Testen und sie verwenden mocha
. Möchtest du, dass sie auch jest
installieren? Nur Um deine Bibliothek auszuführen?Nein, oder? Deshalb sind sie in den devDependencies
.
Wenn jemand npm i deinePaket
ausführt, werden nur die Bibliotheken installiert, die erforderlich sind, um deine Bibliothek zu AUSFÜHREN. Andere Bibliotheken, die du zum Bündeln deines Codes oder zum Testen und Mocken verwendet hast, werden nicht installiert, weil du sie in devDependencies
platziert hast. Recht praktisch, oder?
Also, Warum müssen die Entwickler die devDependancies freigeben?
Angenommen, dein Paket ist ein Open-Source-Paket und Hunderte von Personen senden Pull-Requests an dein Paket. Wie testen sie das Paket? Sie werden dein Repo git clone
und wenn sie ein npm i
ausführen, werden sowohl die Abhängigkeiten als auch die devDependencies installiert.
Weil sie dein Paket nicht verwenden. Sie entwickeln das Paket weiter, daher müssen sie zum Testen deines Pakets die bestehenden Testfälle bestehen sowie neue schreiben. Daher müssen sie deine devDependencies
verwenden, die alle von DIR verwendeten Test-/Build-/Mock-Bibliotheken enthalten.
Ein perfektes Beispiel dafür ist:
$ npm install typescript --save-dev
In diesem Fall möchten Sie Typescript (eine für Javascript lesbare Codiersprache) für die Entwicklung verfügbar haben, aber sobald die App bereitgestellt ist, ist es nicht mehr erforderlich, da der gesamte Code in Javascript transpiliert wurde. Es würde also keinen Sinn machen, es in der veröffentlichten App zu inkludieren. Tatsächlich würde es nur Speicherplatz einnehmen und die Download-Zeiten verlängern.
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.