1238 Stimmen

Was ist der Unterschied zwischen --save und --save-dev?

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?

986voto

Michael Bruce Punkte 10857

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.

827voto

Tuong Le Punkte 17454
  • --save-dev wird verwendet, um das Paket für Entwicklungs-Zwecke zu speichern. Beispiel: Unit-Tests, Minifizierung..
  • --save wird verwendet, um das Paket zu speichern, das für die Anwendung benötigt wird.

239voto

Lakshmi Swetha G Punkte 2681

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.

155voto

Aritra Chakraborty Punkte 12083

Lass mich dir ein Beispiel geben,

  • Du bist ein Entwickler einer sehr ERNSTEN npm-Bibliothek, die verschiedene Testbibliotheken verwendet, um das Paket zu testen.
  • Benutzer laden deine Bibliothek herunter und möchten sie in ihrem Code verwenden. Müssen sie auch deine Testbibliotheken herunterladen? Vielleicht verwendest du 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.

82voto

Jack Punkte 2039

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.com

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.

Powered by:

X