Ja, ich bin verwirrt darüber. Wenn Sie eine kontinuierliche Integration wie Jenkins verwenden, weiß Jenkins, dass er die devDependencies-Module zum Ausführen von Tests verwendet? Ich nehme an, aber es ist nicht sehr offensichtlich.
Alexander Mills
5
Bearbeiten Sie möglicherweise die Frage, um auch zu sagen, was der funktionale Unterschied zwischen Abhängigkeiten und devDependencies ist.
Alexander Mills
5
Über die Option --save-dev installierte Pakete werden bei der Ausführung durch den Benutzer nicht erneut installiert npm install --production. Das ist der betriebliche Unterschied ( weitere Informationen finden Sie unter https://docs.npmjs.com/cli/install ).
Andrew
7
@MuhammadUmer Genau deshalb stellen die Leute hier Fragen - um einen Hinweis zu bekommen. Vielleicht wäre das Hinzufügen einer echten Antwort produktiver - dies ist definitiv eine interessante Unterscheidung, die mir nicht bewusst war.
Simon_Weaver
3
Auch wenn Sie die Umgebungsvariable NODE_ENVauf Produktion setzen, npm installwerden Entwicklungspakete automatisch ausgeschlossen.
Muhammad Umer
Antworten:
591
--save-devwird verwendet, um das Paket für Entwicklungszwecke zu speichern. Beispiel: Unit-Tests, Minimierung ..
--save wird verwendet, um das Paket zu speichern, das für die Ausführung der Anwendung erforderlich ist.
Wie unterscheiden sie sich? Wann würde ich eins gegen das andere verwenden? Kann ich das Paket trotzdem in der Produktion verwenden, wenn es unter --save-dev ist?
Dave Voyles
14
Die Antwort beantwortet kurz und bündig Ihre ersten beiden Fragen. Die Antwort auf die letzte Frage "Kann ich das Paket noch in der Produktion verwenden, wenn es sich unter --save-dev befindet" lautet "Nein". Dies ist zwar durchaus möglich , aber nicht beabsichtigt.
Technetium
61
-DKurzfassungen : ist kurz für --save-devund -Sist kurz für--save
chrisco
164
Diese Antwort ist frustrierend vage. Selbst ein kleines Beispiel würde wesentlich dazu beitragen, dies klarer zu machen.
Choylton B. Higginbottom
33
Beachten Sie, dass ab npm Version 5.0.0 die --saveOption nicht mehr erforderlich ist. Wenn Sie das tun npm install my-package, wird es „mein-Paket“ als eine Abhängigkeit in der package.json Datei hinzufügen.
Martin Carel
642
Der Unterschied zwischen --saveund ist --save-devmöglicherweise nicht sofort erkennbar, wenn Sie beide in Ihren eigenen Projekten ausprobiert haben. Also hier ein paar Beispiele ...
Nehmen wir an, Sie haben eine App erstellt, die das Moment- Paket zum Parsen und Anzeigen von Daten verwendet hat. Ihre App ist ein Scheduler, daher benötigt sie dieses Paket wirklich, um ausgeführt zu werden, wie 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 erzeugen
"dependencies":{..."moment":"^2.17.1"}
Wenn Sie sich entwickeln, ist es wirklich hilfreich, Tools wie Testsuiten zu verwenden, und möglicherweise benötigen Sie Jasmin-Kern und Karma . In diesem Fall würden Sie verwenden
Sie benötigen die Testsuite nicht, um die App im normalen Zustand auszuführen. Es handelt sich also um eine --save-devTypabhängigkeit, nicht mehr. Sie können sehen, dass es ein bisschen schwer vorstellbar ist, wenn Sie nicht verstehen, was wirklich passiert.
Abhängigkeiten werden in einem einfachen Objekt angegeben, das einen Paketnamen einem Versionsbereich zuordnet. Der Versionsbereich ist eine Zeichenfolge mit einem oder mehreren durch Leerzeichen getrennten Deskriptoren. Abhängigkeiten können auch mit einer Tarball- oder Git-URL identifiziert werden.
Bitte setzen Sie keine Testkabelbäume oder Transpiler in Ihr Abhängigkeitsobjekt. Siehe devDependencies weiter unten.
Selbst in den Dokumenten werden Sie aufgefordert, --save-dev für Module wie Testkabelbäume zu verwenden.
IMO, ich denke, das Schlüsselwort "Speichern" ist ein Problem. Warum setzen sie nicht das Flag -dev für die Entwicklung und -deploy für die Bereitstellung? Es ist sinnvoller als das Schlüsselwort "Speichern".
Thinh Vu
1
Warum weiß das Paket nicht einfach (entscheidet), ob es sich um ein Release-Paket oder ein Entwicklungspaket handelt, und --save kann für beide verwendet werden. Es scheint seltsam, den installierenden Benutzer dazu zu bringen, dies zu entscheiden, wenn der Paketentwickler die Absicht erstellt.
CodeGrue
4
CodeGrue: Wenn Sie jQuery nur zum Testen von React-Komponenten verwenden, wird es in save-dev gespeichert, aber Sie können es möglicherweise nicht zum Erstellen Ihres Hauptprojekts verwenden. Ja, das ist möglich. Warum sollte der Packager wissen, was Sie damit machen?
Michael Bruce
2
Viel klarer. Ich bin ein Embedded-Typ, der zum ersten Mal den Workflow von Bootstra + Node.j lernt. Es ist nicht offensichtlich, was der Unterschied von der Manschette ist.
Leroy105
3
@YakovL save-dev bedeutet, dass die Pakete nicht installiert werden, wenn jemand anderes Ihr Paket als Abhängigkeit installiert. Pakete, die nur zum Ausführen von Skripten wie Start / Build verwendet werden, werden in diesem Fall nicht benötigt, sodass sie in Entwicklungsabhängigkeiten versetzt werden. Wenn Sie an einer Web-App arbeiten und nicht an einem Paket, das von anderen verwendet werden soll, sollten Sie sich wahrscheinlich überhaupt keine Sorgen machen.
Riv
111
Standardmäßig installiert NPM einfach ein Paket unter node_modules. Wenn Sie versuchen, Abhängigkeiten für Ihre App / Ihr Modul zu installieren, müssen Sie diese zuerst installieren und dann dem dependenciesAbschnitt Ihres hinzufügen package.json.
--save-devFügt das Paket eines Drittanbieters zu den Entwicklungsabhängigkeiten des Pakets hinzu. Es wird nicht installiert, wenn jemand Ihr Paket installiert. Es ist in der Regel nur dann installiert , wenn jemand klont Ihren Quell - Repository und läuft npm installdarin.
--saveFügt das Paket eines Drittanbieters zu den Abhängigkeiten des Pakets hinzu. Es wird zusammen mit dem Paket installiert, wenn jemand ausgeführt wird npm install package.
Entwicklungsabhängigkeiten sind diejenigen Abhängigkeiten, die nur für die Entwicklung des Pakets benötigt werden. Dies kann Testläufer, Compiler, Packager usw. umfassen. Beide Arten von Abhängigkeiten werden in der Paketdatei package.jsongespeichert. --savefügt hinzu dependencies, --save-devfügt hinzudevDependencies
Ich habe das vermutet ... Sie können --save-dev und --save austauschbar verwenden, wenn Sie eine Web-App erstellen, die nicht zu einem Paket wird, dh von npm heruntergeladen wird, wenn Sie ein Paket entwickeln, um es mit anderen zu teilen ist wichtig, um den Unterschied zu verstehen.
VFein
13
Vielen Dank endlich jemand, der seinen Zweck sagt, wenn Sie npm install verwenden
CapturedTree
3
--save ist jetzt standardmäßig mit npm install mit der Veröffentlichung von npm 5 im Jahr 2017
NattyC
Warten Sie, warum komplexe Sätze? In DevDependecy kann der Entwickler die Pakete installieren, und es wird nur die devDevependency aktualisiert. Wenn ein neuer Entwickler die Projektcodebasis klont und npm install => hier nur dependency package name is going to install.in node_modules ausführt, nicht im Entwicklerpaket wie in Dev-Dependency.
Anupam Maurya
60
Ein perfektes Beispiel dafür ist:
$ npm install typescript --save-dev
In diesem Fall möchten Sie Typescript (eine durch Javascript analysierbare Codierungssprache) für die Entwicklung verfügbar haben. Sobald die App bereitgestellt ist, ist dies jedoch nicht mehr erforderlich, da der gesamte Code in Javascript transpiliert wurde. Daher wäre es nicht sinnvoll, es in die veröffentlichte App aufzunehmen. In der Tat würde es nur Speicherplatz beanspruchen und die Downloadzeiten verlängern.
Was ich verwirrend finde ist, wie wichtig das überhaupt ist? Mit gespeicherte Pakete --savewerden weiterhin nur im node_modulesOrdner gespeichert . Der Code ist nicht in der bereitgestellten Website enthalten.
Kokodoko
6
@Kokodoko Wenn Sie das --save-devFlag verwenden, wird das Paket Ihrem devDependenciesObjekt hinzugefügt . Wenn jemand Ihr Paket installiert , werden alle dependenciesheruntergeladen, die devDependenciesjedoch nicht, da sie zur Laufzeit nicht benötigt werden. Wie in der Antwort angegeben, sparen sie Zeit und Platz. Entwickler, die an Ihren Paketdateien selbst arbeiten, können diese einfach npm installim Paketverzeichnis ausführen , um sie ebenfalls zu installieren devDependencies.
Jasjit Singh Marwah
Wenn Sie also ein Repo von Github herunterladen und eingeben npm install, devDependencieswerden die ignoriert?
Kokodoko
41
Lassen Sie mich Ihnen ein Beispiel geben,
Sie sind Entwickler einer sehr ERNSTEN npm- Bibliothek . Welches verwendet verschiedene Testbibliotheken, um das Paket zu testen.
Ein Benutzer hat Ihre Bibliothek heruntergeladen und möchte sie in seinem Code verwenden. Müssen sie auch Ihre Testbibliotheken herunterladen? Vielleicht verwenden Sie jestzum Testen und sie verwenden mocha. Möchten Sie, dass sie auch installiert jestwerden? Nur um Ihre Bibliothek zu betreiben?
Kein Recht? Deshalb sind sie in devDependencies.
In diesem Fall werden npm i yourPackagenur die Bibliotheken installiert, die zum Ausführen Ihrer Bibliothek erforderlich sind . Andere Bibliotheken, mit denen Sie Ihren Code gebündelt oder getestet und verspottet haben, werden nicht installiert, da Sie sie eingefügt haben devDependencies. Ziemlich ordentlich, oder?
Also, Warum brauchen die Entwickler die belichten devDependancies ?
Angenommen, Ihr Paket ist ein Open-Source-Paket, und Hunderte von Personen senden Pull-Anfragen an Ihr Paket. Wie werden sie dann das Paket testen? Sie werden git cloneIhr Repo und wann sie npm idie Abhängigkeiten sowie devDependencies tun würden .
Weil sie Ihr Paket nicht verwenden. Sie entwickeln das Paket weiter. Um Ihr Paket zu testen, müssen sie die vorhandenen Testfälle bestehen und neue schreiben. Sie müssen also Ihre verwenden devDependencies, die alle von Ihnen verwendeten Test- / Gebäude- / Verspottungsbibliotheken enthält.
Wenn jemand vorhat, Ihr Modul in seinem Programm herunterzuladen und zu verwenden, möchte oder muss er das von Ihnen verwendete externe Test- oder Dokumentationsframework wahrscheinlich nicht herunterladen und erstellen.
Für die Webapp-Entwicklung platziert Yeoman (ein Gerüst-Tool, das unter anderem eine von Experten überprüfte, vorab geschriebene package.json-Datei installiert) alle Pakete in devDependencies und nichts in Abhängigkeiten, sodass die Verwendung von --save-deveine sichere Sache zu sein scheint Zumindest in der Webapp- Entwicklung.
Beachten Sie, dass bei der Verwendung von gulp und der Installation von Paketen Probleme aufgetreten sind, bei --save-devdenen das Paket die erforderlichen Abhängigkeiten nicht installieren würde. Beim Ausführen wurden --savediese fehlenden Abhängigkeiten installiert.
Nick M
18
Ich möchte auch darauf hinweisen, dass ich jetzt --savealle außer Test- und Dokumentationsabhängigkeiten verwende (gemäß den npm-Dokumenten). Ich fange an zu denken, dass das oben erwähnte Yeoman-Beispiel kein gutes Beispiel für bewährte Verfahren ist.
wayfarer_boy
Ich denke auch, warum sollten Sie jemals brauchen, --save-devwird mit jeder Antwort hier nur weniger klar :)
Kokodoko
20
--save-devspeichert die Semver-Spezifikation im Array "devDependencies" in Ihrer Paketdeskriptordatei und --savespeichert sie stattdessen in "Abhängigkeiten".
Diese Antwort ist für mich am sinnvollsten. DevDependencies sind dann für die Entwicklung erforderlich, aber nicht für die Produktion. Daher sind htmllint, sass compilation usw. und Dependencies für Produktionsanforderungen wie Diaporama erforderlich, die vorhanden sein müssen, damit die Dinge ausgeführt werden können.
Miller der Gorilla
3
@ahnbizcad Hier wird es besser beantwortet , aber der Hauptfunktionsunterschied besteht darin, dass devDependencies nicht transitiv eingeschlossen sind.
Pace
Ist dies nicht die intuitivste Art, es für jemanden zu beschreiben, der es noch nicht weiß?: Dev erstellt --save-devPakete lokal für Ihr Projekt, während --savesie lokal für Ihre Installation des Knotens sind.
Ahnbizcad
9
Klare Antworten sind bereits gegeben. Es ist jedoch erwähnenswert, wie sich dies devDependenciesauf die Installation von Paketen auswirkt:
Standardmäßig installiert npm install alle Module, die in package.json als Abhängigkeiten aufgeführt sind. Mit dem Flag --production (oder wenn die Umgebungsvariable NODE_ENV auf Produktion gesetzt ist) installiert npm keine in devDependencies aufgelisteten Module.
--save-dev wird für Module verwendet, die bei der Entwicklung der Anwendung verwendet werden und während der Ausführung in der Produktionsumgebung nicht erforderlich sind.
--save wird zum Hinzufügen in package.json verwendet und ist für die Ausführung der Anwendung erforderlich.
Beispiel: Express, Body-Parser, Lodash, Helm, MySQL. Alle diese Funktionen werden beim Ausführen der Anwendung verwendet. Verwenden Sie diese Option, um Abhängigkeiten einzufügen, während Mokka, Istanbul, Chai und Sonarqube-Scanner während der Entwicklung verwendet werden -abhängigkeiten.
npm link oder npm install installiert auch die dev-Abhängigkeitsmodule zusammen mit den Abhängigkeitsmodulen in Ihrem Projektordner
Alle Erklärungen hier sind großartig, aber es fehlt eine sehr wichtige Sache: Wie installieren Sie nur Produktionsabhängigkeiten? (ohne die Entwicklungsabhängigkeiten). Wir trennen dependenciesvon devDependenciesdurch die Verwendung --saveoder --save-dev. Um alles zu installieren, was wir verwenden:
npm i
Um nur Produktionspakete zu installieren, sollten wir verwenden:
Ich denke, alle Unterschiede werden auftreten, wenn jemand Ihre Codes verwendet, anstatt sie selbst zu verwenden
Beispielsweise schreiben Sie eine HTTP-Bibliothek mit dem Namen node's request
In Ihrer Bibliothek,
Sie haben lodash verwendet, um Zeichenfolge und Objekt zu verarbeiten. Ohne lodash können Ihre Codes nicht ausgeführt werden
Wenn jemand Ihre HTTP-Bibliothek als Teil seiner Codes verwendet. Ihre Codes werden mit seinen zusammengestellt.
Ihre Codes benötigen lodash, also müssen Sie dependencieszum Kompilieren eingeben
Wenn Sie ein Projekt wie monaco-editoreinen Web-Editor schreiben ,
Sie haben alle Ihre Codes gebündelt und Ihre product env libraryVerwendung von Webpack, wenn die Erstellung abgeschlossen ist, haben nur einemonaco-min.js
Also macht jemand keinen Fall, ob --saveoder --save-dependencies, nur er brauchtmonaco-min.js
Zusammenfassung:
Wenn jemand Ihre Codes kompilieren möchte (als Bibliothek verwenden), geben Sie lodashdie von Ihren Codes verwendeten eindependencies
Wenn jemand Ihren Codes weitere Funktionen hinzufügen möchte, muss er diese eingeben unit testund compilereingebendev-dependencies
Die Leute verwenden npm in der Produktion, um böse coole Sachen zu machen. Node.js ist ein Beispiel dafür, also möchten Sie nicht, dass alle Ihre Entwickler-Tools ausgeführt werden.
Wenn Sie gulp (oder ähnliches) verwenden, um Build-Dateien für Ihren Server zu erstellen, spielt dies keine Rolle.
npm install --production
. Das ist der betriebliche Unterschied ( weitere Informationen finden Sie unter https://docs.npmjs.com/cli/install ).NODE_ENV
auf Produktion setzen,npm install
werden Entwicklungspakete automatisch ausgeschlossen.Antworten:
--save-dev
wird verwendet, um das Paket für Entwicklungszwecke zu speichern. Beispiel: Unit-Tests, Minimierung ..--save
wird verwendet, um das Paket zu speichern, das für die Ausführung der Anwendung erforderlich ist.quelle
-D
Kurzfassungen : ist kurz für--save-dev
und-S
ist kurz für--save
--save
Option nicht mehr erforderlich ist. Wenn Sie das tunnpm install my-package
, wird es „mein-Paket“ als eine Abhängigkeit in der package.json Datei hinzufügen.Der Unterschied zwischen
--save
und ist--save-dev
möglicherweise nicht sofort erkennbar, wenn Sie beide in Ihren eigenen Projekten ausprobiert haben. Also hier ein paar Beispiele ...Nehmen wir an, Sie haben eine App erstellt, die das Moment- Paket zum Parsen und Anzeigen von Daten verwendet hat. Ihre App ist ein Scheduler, daher benötigt sie dieses Paket wirklich, um ausgeführt zu werden, wie in: Kann ohne es nicht ausgeführt werden . In diesem Fall würden Sie verwenden
Dies würde einen neuen Wert in Ihrer package.json erzeugen
Wenn Sie sich entwickeln, ist es wirklich hilfreich, Tools wie Testsuiten zu verwenden, und möglicherweise benötigen Sie Jasmin-Kern und Karma . In diesem Fall würden Sie verwenden
Dies würde auch einen neuen Wert in Ihrer package.json erzeugen
Sie benötigen die Testsuite nicht, um die App im normalen Zustand auszuführen. Es handelt sich also um eine
--save-dev
Typabhängigkeit, nicht mehr. Sie können sehen, dass es ein bisschen schwer vorstellbar ist, wenn Sie nicht verstehen, was wirklich passiert.Entnommen direkt aus NPM docs docs # Abhängigkeiten
Selbst in den Dokumenten werden Sie aufgefordert, --save-dev für Module wie Testkabelbäume zu verwenden.
Ich hoffe das hilft und ist klar.
quelle
Standardmäßig installiert NPM einfach ein Paket unter node_modules. Wenn Sie versuchen, Abhängigkeiten für Ihre App / Ihr Modul zu installieren, müssen Sie diese zuerst installieren und dann dem
dependencies
Abschnitt Ihres hinzufügenpackage.json
.--save-dev
Fügt das Paket eines Drittanbieters zu den Entwicklungsabhängigkeiten des Pakets hinzu. Es wird nicht installiert, wenn jemand Ihr Paket installiert. Es ist in der Regel nur dann installiert , wenn jemand klont Ihren Quell - Repository und läuftnpm install
darin.--save
Fügt das Paket eines Drittanbieters zu den Abhängigkeiten des Pakets hinzu. Es wird zusammen mit dem Paket installiert, wenn jemand ausgeführt wirdnpm install package
.Entwicklungsabhängigkeiten sind diejenigen Abhängigkeiten, die nur für die Entwicklung des Pakets benötigt werden. Dies kann Testläufer, Compiler, Packager usw. umfassen. Beide Arten von Abhängigkeiten werden in der Paketdatei
package.json
gespeichert.--save
fügt hinzudependencies
,--save-dev
fügt hinzudevDependencies
Die npm-Installationsdokumentation finden Sie hier.
quelle
dependency package name is going to install.
in node_modules ausführt, nicht im Entwicklerpaket wie in Dev-Dependency.Ein perfektes Beispiel dafür ist:
In diesem Fall möchten Sie Typescript (eine durch Javascript analysierbare Codierungssprache) für die Entwicklung verfügbar haben. Sobald die App bereitgestellt ist, ist dies jedoch nicht mehr erforderlich, da der gesamte Code in Javascript transpiliert wurde. Daher wäre es nicht sinnvoll, es in die veröffentlichte App aufzunehmen. In der Tat würde es nur Speicherplatz beanspruchen und die Downloadzeiten verlängern.
quelle
--save
werden weiterhin nur imnode_modules
Ordner gespeichert . Der Code ist nicht in der bereitgestellten Website enthalten.--save-dev
Flag verwenden, wird das Paket IhremdevDependencies
Objekt hinzugefügt . Wenn jemand Ihr Paket installiert , werden alledependencies
heruntergeladen, diedevDependencies
jedoch nicht, da sie zur Laufzeit nicht benötigt werden. Wie in der Antwort angegeben, sparen sie Zeit und Platz. Entwickler, die an Ihren Paketdateien selbst arbeiten, können diese einfachnpm install
im Paketverzeichnis ausführen , um sie ebenfalls zu installierendevDependencies
.npm install
,devDependencies
werden die ignoriert?Lassen Sie mich Ihnen ein Beispiel geben,
jest
zum Testen und sie verwendenmocha
. Möchten Sie, dass sie auch installiertjest
werden? Nur um Ihre Bibliothek zu betreiben?Kein Recht? Deshalb sind sie in
devDependencies
.In diesem Fall werden
npm i yourPackage
nur die Bibliotheken installiert, die zum Ausführen Ihrer Bibliothek erforderlich sind . Andere Bibliotheken, mit denen Sie Ihren Code gebündelt oder getestet und verspottet haben, werden nicht installiert, da Sie sie eingefügt habendevDependencies
. Ziemlich ordentlich, oder?Also, Warum brauchen die Entwickler die belichten devDependancies ?
Angenommen, Ihr Paket ist ein Open-Source-Paket, und Hunderte von Personen senden Pull-Anfragen an Ihr Paket. Wie werden sie dann das Paket testen? Sie werden
git clone
Ihr Repo und wann sienpm i
die Abhängigkeiten sowie devDependencies tun würden .Weil sie Ihr Paket nicht verwenden. Sie entwickeln das Paket weiter. Um Ihr Paket zu testen, müssen sie die vorhandenen Testfälle bestehen und neue schreiben. Sie müssen also Ihre verwenden
devDependencies
, die alle von Ihnen verwendeten Test- / Gebäude- / Verspottungsbibliotheken enthält.quelle
Wie von @ andreas-hultgren in dieser Antwort und gemäß den npm-Dokumenten vorgeschlagen :
Für die Webapp-Entwicklung platziert Yeoman (ein Gerüst-Tool, das unter anderem eine von Experten überprüfte, vorab geschriebene package.json-Datei installiert) alle Pakete in devDependencies und nichts in Abhängigkeiten, sodass die Verwendung von
--save-dev
eine sichere Sache zu sein scheint Zumindest in der Webapp- Entwicklung.quelle
--save-dev
denen das Paket die erforderlichen Abhängigkeiten nicht installieren würde. Beim Ausführen wurden--save
diese fehlenden Abhängigkeiten installiert.--save
alle außer Test- und Dokumentationsabhängigkeiten verwende (gemäß den npm-Dokumenten). Ich fange an zu denken, dass das oben erwähnte Yeoman-Beispiel kein gutes Beispiel für bewährte Verfahren ist.--save-dev
wird mit jeder Antwort hier nur weniger klar :)--save-dev
speichert die Semver-Spezifikation im Array "devDependencies" in Ihrer Paketdeskriptordatei und--save
speichert sie stattdessen in "Abhängigkeiten".quelle
--save-dev
Pakete lokal für Ihr Projekt, während--save
sie lokal für Ihre Installation des Knotens sind.Klare Antworten sind bereits gegeben. Es ist jedoch erwähnenswert, wie sich dies
devDependencies
auf die Installation von Paketen auswirkt:Siehe: https://docs.npmjs.com/cli/install
quelle
Im Allgemeinen möchten Sie das Produktionspaket nicht mit Dingen aufblähen, die Sie nur für Entwicklungszwecke verwenden möchten.
Verwenden Sie die Option
--save-dev
(oder-D
), um Pakete wie Unit-Test-Frameworks (Scherz, Jasmin, Mokka, Chai usw.) zu trennen.Alle anderen Pakete, die Ihre App für die Produktion benötigt, sollten mit
--save
(oder-S
) installiert werden .Wenn Sie die
package.json
Datei öffnen , werden diese Einträge in zwei verschiedenen Abschnitten aufgelistet:quelle
--save-dev wird für Module verwendet, die bei der Entwicklung der Anwendung verwendet werden und während der Ausführung in der Produktionsumgebung nicht erforderlich sind. --save wird zum Hinzufügen in package.json verwendet und ist für die Ausführung der Anwendung erforderlich.
Beispiel: Express, Body-Parser, Lodash, Helm, MySQL. Alle diese Funktionen werden beim Ausführen der Anwendung verwendet. Verwenden Sie diese Option, um Abhängigkeiten einzufügen, während Mokka, Istanbul, Chai und Sonarqube-Scanner während der Entwicklung verwendet werden -abhängigkeiten.
npm link oder npm install installiert auch die dev-Abhängigkeitsmodule zusammen mit den Abhängigkeitsmodulen in Ihrem Projektordner
quelle
Alle Erklärungen hier sind großartig, aber es fehlt eine sehr wichtige Sache: Wie installieren Sie nur Produktionsabhängigkeiten? (ohne die Entwicklungsabhängigkeiten). Wir trennen
dependencies
vondevDependencies
durch die Verwendung--save
oder--save-dev
. Um alles zu installieren, was wir verwenden:Um nur Produktionspakete zu installieren, sollten wir verwenden:
quelle
Ich möchte einige meiner Ideen als hinzufügen
Ich denke, alle Unterschiede werden auftreten, wenn jemand Ihre Codes verwendet, anstatt sie selbst zu verwenden
Beispielsweise schreiben Sie eine HTTP-Bibliothek mit dem Namen
node's request
In Ihrer Bibliothek,
Sie haben lodash verwendet, um Zeichenfolge und Objekt zu verarbeiten. Ohne lodash können Ihre Codes nicht ausgeführt werden
Wenn jemand Ihre HTTP-Bibliothek als Teil seiner Codes verwendet. Ihre Codes werden mit seinen zusammengestellt.
Ihre Codes benötigen lodash, also müssen Sie
dependencies
zum Kompilieren eingebenWenn Sie ein Projekt wie
monaco-editor
einen Web-Editor schreiben ,Sie haben alle Ihre Codes gebündelt und Ihre
product env library
Verwendung von Webpack, wenn die Erstellung abgeschlossen ist, haben nur einemonaco-min.js
Also macht jemand keinen Fall, ob
--save
oder--save-dependencies
, nur er brauchtmonaco-min.js
Zusammenfassung:
Wenn jemand Ihre Codes kompilieren möchte (als Bibliothek verwenden), geben Sie
lodash
die von Ihren Codes verwendeten eindependencies
Wenn jemand Ihren Codes weitere Funktionen hinzufügen möchte, muss er diese eingeben
unit test
undcompiler
eingebendev-dependencies
quelle
Die Leute verwenden npm in der Produktion, um böse coole Sachen zu machen. Node.js ist ein Beispiel dafür, also möchten Sie nicht, dass alle Ihre Entwickler-Tools ausgeführt werden.
Wenn Sie gulp (oder ähnliches) verwenden, um Build-Dateien für Ihren Server zu erstellen, spielt dies keine Rolle.
quelle