Was ist der Unterschied zwischen Abhängigkeiten, devDependencies und peerDependencies in der Datei npm package.json?

2029

Diese Dokumentation beantwortet meine Frage sehr schlecht. Ich habe diese Erklärungen nicht verstanden. Kann jemand in einfacheren Worten sagen? Vielleicht mit Beispielen, wenn es schwierig ist, einfache Wörter zu wählen?

EDIT wurde hinzugefügt peerDependencies, was eng miteinander verbunden ist und Verwirrung stiften kann.

Vitalii Korsakov
quelle
48
Beachten Sie, dass es auch optionalDependenciesjetzt gibt.
Aidan Feldman
118
@AidanFeldman "optionalDependencies" ist mein Oxymoron des Tages
Nick Bull
1
In der npm-Dokumentation heißt es: "Abhängigkeiten": Pakete, die von Ihrer Anwendung in der Produktion benötigt werden. "devDependencies": Pakete, die nur für die lokale Entwicklung und das Testen benötigt werden. siehe Link: docs.npmjs.com/…
Deke

Antworten:

2365

Zusammenfassung wichtiger Verhaltensunterschiede:

  • dependencies sind auf beiden installiert:

    • npm install aus einem Verzeichnis, das enthält package.json
    • npm install $package in einem anderen Verzeichnis
  • devDependencies sind:

    • Wird auch npm installin einem Verzeichnis installiert , das enthält package.json, es sei denn, Sie übergeben die --productionFlagge (stimmen Sie der Antwort von Gayan Charith zu ).
    • nicht npm install "$package"in einem anderen Verzeichnis installiert , es sei denn, Sie geben ihm die --devOption.
    • sind nicht transitiv installiert.
  • peerDependencies::

    • vor 3.0: werden immer installiert, wenn sie fehlen, und geben einen Fehler aus, wenn mehrere inkompatible Versionen der Abhängigkeit von verschiedenen Abhängigkeiten verwendet werden.
    • Voraussichtlich ab 3.0 (ungetestet): Geben Sie eine Warnung aus, wenn diese fehlt npm install, und Sie müssen die Abhängigkeit manuell selbst lösen. Wenn beim Ausführen die Abhängigkeit fehlt, wird ein Fehler angezeigt (von @nextgentech erwähnt ).
  • Transitivität (erwähnt von Ben Hutchison ):

    • dependencies werden transitiv installiert: Wenn A B benötigt und B C benötigt, wird C installiert, andernfalls könnte B nicht funktionieren und A auch nicht.

    • devDependencieswird nicht transitiv installiert. Zum Beispiel müssen wir B nicht testen, um A zu testen, sodass die Testabhängigkeiten von B weggelassen werden können.

Verwandte Optionen, die hier nicht behandelt werden:

devDependencies

dependenciesmüssen ausgeführt werden, devDependenciesnur um zu entwickeln, zB: Unit-Tests, CoffeeScript-zu-JavaScript-Transpilation, Minimierung, ...

Wenn Sie ein Paket entwickeln möchten, laden Sie es herunter (z. B. über git clone), gehen Sie zu seinem Stammverzeichnis, das Folgendes enthält package.json, und führen Sie Folgendes aus:

npm install

Da Sie über die eigentliche Quelle verfügen, ist klar, dass Sie sie entwickeln möchten. Standardmäßig werden also sowohl Abhängigkeiten dependencies(da Sie diese natürlich ausführen müssen, um sie zu entwickeln) als auch devDependencyAbhängigkeiten installiert.

Wenn Sie jedoch nur ein Endbenutzer sind, der nur ein Paket installieren möchte, um es zu verwenden, können Sie dies aus einem beliebigen Verzeichnis tun:

npm install "$package"

In diesem Fall möchten Sie normalerweise keine Entwicklungsabhängigkeiten, sodass Sie nur das erhalten, was für die Verwendung des Pakets erforderlich ist : dependencies.

Wenn Sie in diesem Fall wirklich Entwicklungspakete installieren möchten, können Sie die devKonfigurationsoption truemöglicherweise über die Befehlszeile wie folgt festlegen :

npm install "$package" --dev

Die Option ist false standardmäßig aktiviert, da dies ein viel seltenerer Fall ist.

peerDependencies

(Getestet vor 3.0)

Quelle: https://nodejs.org/en/blog/npm/peer-dependencies/

Bei regulären Abhängigkeiten können Sie mehrere Versionen der Abhängigkeit haben: Sie wird einfach in der installiert node_modules der Abhängigkeit .

Wenn beispielsweise dependency1und dependency2beide von dependency3unterschiedlichen Versionen abhängen, sieht der Projektbaum folgendermaßen aus:

root/node_modules/
                 |
                 +- dependency1/node_modules/
                 |                          |
                 |                          +- dependency3 v1.0/
                 |
                 |
                 +- dependency2/node_modules/
                                            |
                                            +- dependency3 v2.0/

Plugins sind jedoch Pakete, für die normalerweise kein anderes Paket erforderlich ist, das in diesem Zusammenhang als Host bezeichnet wird . Stattdessen:

  • Plugins werden vom Host benötigt
  • Plugins bieten eine Standardschnittstelle, die der Host voraussichtlich finden wird
  • Nur der Host wird direkt vom Benutzer aufgerufen, daher muss es eine einzige Version davon geben.

Wenn z. B. dependency1und dependency2Peer davon abhängen dependency3, sieht der Projektbaum folgendermaßen aus:

root/node_modules/
                 |
                 +- dependency1/
                 |
                 +- dependency2/
                 |
                 +- dependency3 v1.0/

Dies geschieht, obwohl Sie dies dependency3in Ihrer package.jsonDatei nie erwähnt haben .

Ich denke, dies ist ein Beispiel für das Entwurfsmuster Inversion of Control .

Ein prototypisches Beispiel für Peer-Abhängigkeiten ist Grunt, der Host und seine Plugins.

Auf einem Grunt-Plugin wie https://github.com/gruntjs/grunt-contrib-uglify sehen Sie beispielsweise Folgendes :

  • grunt ist ein peer-dependency
  • Das einzige require('grunt')ist unter tests/: Es wird nicht wirklich vom Programm verwendet.

Wenn der Benutzer dann ein Plugin verwendet, benötigt er das Plugin implizit von der, Gruntfileindem er eine grunt.loadNpmTasks('grunt-contrib-uglify')Zeile hinzufügt. gruntDer Benutzer ruft jedoch direkt an.

Dies würde dann nicht funktionieren, wenn jedes Plugin eine andere Grunt-Version benötigt.

Handbuch

Ich denke, die Dokumentation beantwortet die Frage ziemlich gut. Vielleicht sind Sie mit Knoten- / anderen Paketmanagern nicht nur vertraut genug. Ich verstehe es wahrscheinlich nur, weil ich etwas über Ruby Bundler weiß.

Die Schlüsselzeile lautet:

Diese Dinge werden beim Ausführen von npm link oder npm install vom Stammverzeichnis eines Pakets installiert und können wie jeder andere npm-Konfigurationsparameter verwaltet werden. Weitere Informationen zum Thema finden Sie unter npm-config (7).

Und dann unter npm-config (7) finden dev:

Default: false
Type: Boolean

Install dev-dependencies along with packages.
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功
quelle
5
Ah. Ich sehe, ich habe falsch verstanden. Ihre Antwort lautet, als ob npm install packagees sich um einen Befehl handelt, mit dem Sie alle Pakete installieren würden, bei denen es sich nicht um Entwicklungsabhängigkeiten handelt, und nicht um das, was Sie jetzt gemeint haben, nämlich "Installieren des Pakets mit dem Namen [Paket]" bevor Sie dies lesen. Wenn ich Sie wäre, würde ich bearbeiten, um [Paketname] zu sagen, was deutlich zeigt, dass Sie "Name hier einfügen" meinen.
Tom W
184
Das ist toll! Ich habe es nie bemerkt, aber diese Antwort hat mich gelehrt, dass der Unterschied zwischen Abhängigkeiten und devDependencies nur anwendbar ist, wenn Sie ein npm-Paket veröffentlichen. Wenn Sie nur an einer Anwendung oder Site arbeiten, sollte dies nicht allzu wichtig sein. Vielen Dank!
jedd.ahyoung
3
Dieser Beitrag sollte aktualisiert werden, um das geänderte peerDependenciesVerhalten in der kommenden npm @ 3 widerzuspiegeln . Von blog.npmjs.org/post/110924823920/npm-weekly-5 : "Wir werden die Peer-Abhängigkeit nicht mehr automatisch herunterladen. Stattdessen werden wir Sie warnen, wenn die Peer-Abhängigkeit noch nicht installiert ist. Dies erfordert Sie Um PeerDependency-Konflikte manuell zu lösen, sollte dies auf lange Sicht die Wahrscheinlichkeit verringern, dass Sie mit den Abhängigkeiten Ihrer Pakete in eine schwierige Situation geraten. "
nextgentech
8
Außerdem werden devDependencies nicht transitiv von abhängigen Paketen installiert. Beispiel: Paket A hängt von Paket B ab. Paket B hängt von Paket C ab, und B hängt auch von Paket D ab. Wenn Sie npm installvon Paket A ausgeführt werden, erhalten Sie B und C, jedoch nicht D.
Ben Hutchison
9
Es ist wichtig zu beachten, dass devDependenciesnicht installiert wird, wenn eingestellt NODE_ENVist production.
Augusto Franzoia
491

Wenn Sie devDependencies nicht installieren möchten, können Sie verwenden npm install --production

Gayan Charith
quelle
1
npm install --save ist für Software-Abhängigkeit?
Vamsi Pavan Mahesh
19
npm install installiert alle Abhängigkeiten. Das Flag --save wird verwendet, wenn Sie das spezifische Modul auch zu package.json hinzufügen möchten. Beispiel: - npm install uglify --save installiert uglify in Ihrem Projektordner und fügt uglify zur Datei package.json hinzu.
Gayan Charith
6
Und da es sich um devDependencies handelt, können Sie das neue Modul mit --save-dev als devDependency speichern. Beispiel: npm install uglify --save-dev
Mykaelos
9
Ab npm 5 ist die --saveOption nicht mehr erforderlich. Wenn Sie "npm install my-package" ausführen, wird my-package als Abhängigkeit in Ihre package.jsonDatei eingefügt.
Martin Carel
nur npm installieren
Sultan Aslam
116

Zum Beispiel wäre Mokka normalerweise eine devDependency, da das Testen in der Produktion nicht erforderlich ist, während express eine Abhängigkeit wäre.

Dan Kohn
quelle
4
Ich würde dazu neigen, Tests als Abhängigkeit zu setzen, da Sie möglicherweise Selbsttests ausführen möchten, bevor Sie den Produktionsserver starten
47
Ich würde stattdessen empfehlen, einen kontinuierlichen Integrationsdienst wie Hudson oder CircleCI zu verwenden, der Ihre Tests ausführt und sie dann in der Produktion bereitstellt, wenn sie erfolgreich sind.
Dan Kohn
1
Es kann immer noch relevant sein, den tatsächlichen Server zu testen, da sich der CI-Server möglicherweise irgendwie vom Prod-Server unterscheidet und dieser Unterschied z. B. den Start der App verhindern kann ...
Nicole
2
@Nicole Warum sollten Sie Ihren Staging-Server in der Konfiguration nicht mit Ihrem Produkt identisch machen?
Lucas
1
Andererseits führt das Hinzufügen von Testabhängigkeiten als reguläre Abhängigkeiten eine ganze Reihe zusätzlicher Bibliotheken ein, von denen jede auf irgendeine Weise fehlschlagen kann. Ich würde mich zu leichten Produktionsservern mit so wenig Code wie möglich neigen (Wortspiel!). Denken Sie daran, der beste Code ist kein Code!
Stijn de Witt
69

Abhängigkeiten
Abhängigkeiten, die Ihr Projekt ausführen muss, z. B. eine Bibliothek, die Funktionen bereitstellt, die Sie aus Ihrem Code aufrufen.
Sie werden transitiv installiert (wenn A von B abhängig von C abhängt, installiert npm install on A B und C).
Beispiel: lodash: Ihr Projekt ruft einige lodash-Funktionen auf.

devDependencies
Abhängigkeiten, die Sie nur während der Entwicklung oder Veröffentlichung benötigen, wie Compiler, die Ihren Code in Javascript, Testframeworks oder Dokumentationsgeneratoren kompilieren.
Sie werden nicht transitiv installiert (wenn A von B dev abhängt - abhängig von C, installiert npm install on A nur B).
Beispiel: grunzen: Ihr Projekt verwendet grunzen, um sich selbst zu erstellen.

peerDependencies
Abhängigkeiten, die Ihr Projekt in das übergeordnete Projekt einbindet oder ändert, normalerweise ein Plugin für eine andere Bibliothek oder ein anderes Tool. Es soll lediglich überprüft werden, ob das übergeordnete Projekt (Projekt, das von Ihrem Projekt abhängt) von dem Projekt abhängt, in das Sie sich einbinden. Wenn Sie also ein Plugin C erstellen, das der Bibliothek B Funktionen hinzufügt, muss jemand, der ein Projekt A erstellt, eine Abhängigkeit von B haben, wenn er eine Abhängigkeit von C hat.
Sie sind nicht installiert (es sei denn, npm <3), sondern nur überprüft auf.
Beispiel: Grunzen: Ihr Projekt erweitert das Grunzen um Funktionen und kann nur für Projekte verwendet werden, die Grunzen verwenden.

In dieser Dokumentation werden Peer-Abhängigkeiten sehr gut erläutert: https://nodejs.org/en/blog/npm/peer-dependencies/

Außerdem wurde die npm-Dokumentation im Laufe der Zeit verbessert und bietet nun bessere Erklärungen für die verschiedenen Arten von Abhängigkeiten: https://github.com/npm/cli/blob/latest/doc/files/package.json.md#devdependencies

qwertzguy
quelle
63

So speichern Sie ein Paket in package.json als Entwicklungsabhängigkeiten :

npm install "$package" --save-dev

Wenn Sie es ausführen npm install, werden sowohl devDependenciesund als auch installiert dependencies. So vermeiden Sie einen Installationslauf devDependencies:

npm install --production
Mohammed Safeer
quelle
3
Sie können auch verwenden: npm i -S
Maysara Alhindi
36

Es gibt einige Module und Pakete, die nur für die Entwicklung erforderlich sind und in der Produktion nicht benötigt werden. Wie es in der Dokumentation steht :

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. In diesem Fall ist es am besten, diese zusätzlichen Elemente in einem devDependencies-Hash aufzulisten.

Amberlamps
quelle
Was ist, wenn Sie in der Produktion nur die Datei bundle.js ausführen? Benötigen Sie diese Abhängigkeiten wirklich?
RegarBoy
Wenn Sie bundle.js auf dem Server ausführen, machen Sie ein serverseitiges Webpack oder so ... Bitte überprüfen Sie, ob dies der Fall ist, da dies normalerweise nicht der Fall ist und es tatsächlich viel Arbeit erfordert, um das ordnungsgemäß auszuführen (I. weiß, weil ich das getan habe). Ich vermute, dass Ihre bundle.js nur für Browser bereitgestellt wird und den clientseitigen Code enthält.
Stijn de Witt
16

Eine einfache Erklärung, die es mir klarer gemacht hat, ist:

Wenn Sie Ihre App bereitstellen, müssen Module in Abhängigkeiten installiert werden, sonst funktioniert Ihre App nicht. Module in devDependencies müssen nicht auf dem Produktionsserver installiert werden, da Sie nicht auf diesem Computer entwickeln. Verknüpfung

Jyoti Duhan
quelle
2
Wenn wir also eine Website erstellen und in der Prod-Version alle Bibliotheken eingebunden werden vendor.js, sollten alle unsere Deps Dev Deps sein, wenn kompilierter Code in das Repo übernommen wird. Und es sollte festgeschrieben werden, da es sonst seltsam ist, dass Sie das Modul kompilieren und nicht nur installieren müssen (und das Testen ist auch hier irgendwo, da jede Änderung der Submodule zur Regression führen kann) ...
Qwertiy
Tolle Antwort, aber es gibt eine Frage? Erstellt ein mögliches Webpack ein beschädigtes Bundle? Ich vermute, dass devDependencies-Pakete in der Produktversion nicht funktionieren, webpack -pmeine ich. Bitte beantworte meine Frage.
AmerllicA
Wenn beim Erstellen der Produktion Probleme auftreten, sollte Ihr Bereitstellungsprozess so gestaltet sein, dass beim Erstellen Fehler angezeigt werden und kein beschädigter Code in die Produktion übertragen wird (z. B. können Sie Jenkins ausprobieren). Devdependencies müssen sowieso nicht auf dem Produktionsserver installiert sein.
Jyoti Duhan
und was ist mit Peer-Abhängigkeiten?
Dev27
13

Ich möchte der Antwort meine Ansicht zu diesen Erklärungen zu Abhängigkeiten hinzufügen

  • dependencies werden für die direkte Verwendung in Ihrer Codebasis verwendet, für Dinge, die normalerweise im Produktionscode landen, oder für Codestücke
  • devDependencies werden für den Erstellungsprozess verwendet, Tools, mit denen Sie verwalten können, wie der Endcode enden wird, Testmodule von Drittanbietern (z. B. Webpack-Inhalte)
Sîrbu Nicolae-Cezar
quelle
Was ist mit CSS-Assets?
Brian Zelip
8

Zusamenfassend

  1. Abhängigkeiten - npm install <package> --save-prodInstalliert Pakete, die von Ihrer Anwendung in der Produktionsumgebung benötigt werden.

  2. DevDependencies - Installiertnpm install <package> --save-dev Pakete, die nur für die lokale Entwicklung und das Testen erforderlich sind

  3. Durch npm installeinfaches Eingeben werden alle in package.json genannten Pakete installiert

Wenn Sie also an Ihrem lokalen Computer arbeiten, geben Sie einfach ein npm installund fahren Sie fort :)

Cherankrish
quelle
6

peerDependenciesmachte für mich keinen Sinn, bis ich diesen Ausschnitt aus einem Blog-Beitrag zum oben erwähnten Thema Ciro las :

Was [ Plugins ] benötigen, ist eine Möglichkeit, diese „Abhängigkeiten“ zwischen Plugins und ihrem Host-Paket auszudrücken. Eine Art zu sagen: "Ich arbeite nur, wenn ich an Version 1.2.x meines Host-Pakets angeschlossen bin. Wenn Sie mich also installieren, stellen Sie sicher, dass es sich neben einem kompatiblen Host befindet." Wir nennen diese Beziehung eine Peer-Abhängigkeit.

Das Plugin erwartet eine bestimmte Version des Hosts ...

peerDependenciessind für Plugins Bibliotheken, die eine "Host" -Bibliothek benötigen, um ihre Funktion auszuführen, aber möglicherweise zu einem Zeitpunkt geschrieben wurden, bevor die neueste Version des Hosts veröffentlicht wurde.

Das heißt, wenn ich PluginX v1für schreibe HostLibraryX v3und weggehe, gibt es keine Garantie, dass PluginX v1es funktioniert, wenn HostLibraryX v4(oder sogar HostLibraryX v3.0.1) veröffentlicht wird.

... aber das Plugin hängt nicht vom Host ab ...

Aus der Sicht des Plugins, nur fügt Funktionen an die Host - Bibliothek. Ich "brauche" den Host nicht wirklich, um einem Plugin eine Abhängigkeit hinzuzufügen, und Plugins hängen oft nicht buchstäblich von ihrem Host ab. Wenn Sie den Host nicht haben, macht das Plugin harmlos nichts.

Dies bedeutet, dass dependencieses nicht wirklich das richtige Konzept für Plugins ist.

Schlimmer noch, wenn mein Host wie eine Abhängigkeit behandelt würde, würden wir in der Situation enden, die in demselben Blog-Beitrag erwähnt wird (ein wenig bearbeitet, um den Host & das Plugin dieser Antwort zu verwenden):

Aber jetzt [wenn wir die aktuelle Version von HostLibraryX als Abhängigkeit für PluginX behandeln] führt das Ausführen npm installzu dem unerwarteten Abhängigkeitsgraphen von

├── HostLibraryX@4.0.0
└─┬ PluginX@1.0.0
  └── HostLibraryX@3.0.0

Ich überlasse die subtilen Fehler, die vom Plugin mit einer anderen [HostLibraryX] -API als der Hauptanwendung ausgehen, Ihrer Fantasie.

... und der Host hängt offensichtlich nicht vom Plugin ab ...

... das ist der springende Punkt bei Plugins. Wenn der Host nett genug wäre, Abhängigkeitsinformationen für alle seine Plugins aufzunehmen, würde dies das Problem lösen, aber auch ein riesiges neues kulturelles Problem mit sich bringen : Plugin-Management!

Der springende Punkt bei Plugins ist, dass sie anonym gekoppelt werden können. In einer perfekten Welt wäre es ordentlich, wenn der Gastgeber sie alle verwaltet, aber wir werden keine Bibliotheken benötigen, die Katzen hüten.

Wenn wir nicht hierarchisch abhängig sind, sind wir vielleicht voneinander abhängige Kollegen ...

Stattdessen haben wir das Konzept, Gleichaltrige zu sein. Weder Host noch Plugin befinden sich im Abhängigkeitseimer des anderen. Beide leben auf derselben Ebene des Abhängigkeitsgraphen.


... aber das ist keine automatisierbare Beziehung. <<< Moneyball !!!

Wenn ich ein Peer von bin PluginX v1( also eine Peer- Abhängigkeit von ) erwarteHostLibraryX v3 , werde ich es sagen. Wenn Sie auf die neueste Auto-Upgrade haben HostLibraryX v4(beachten Sie, dass die Version 4 ) und haben Plugin v1installiert ist , müssen Sie wissen, nicht wahr?

npm kann diese Situation für mich nicht bewältigen -

"Hey, ich sehe, dass du verwendest PluginX v1! Ich rüste automatisch HostLibraryXvon v4 auf v3 herunter , kk?"

... oder...

"Hey, ich sehe, dass du verwendest PluginX v1. Das erwartet HostLibraryX v3, was du während deines letzten Updates im Staub gelassen hast. Um sicher zu gehen, deinstalliere ich automatisch Plugin v1!! 1!

Wie wäre es mit nein, npm?!

Npm also nicht. Es macht Sie auf die Situation aufmerksam und lässt Sie herausfinden, ob HostLibraryX v4es sich um einen geeigneten Peer handelt Plugin v1.


Koda

Durch eine gute peerDependencyVerwaltung der Plugins funktioniert dieses Konzept in der Praxis intuitiver. Aus dem Blog-Beitrag noch einmal ...

Ein Ratschlag: Die Anforderungen an Peer-Abhängigkeiten sollten im Gegensatz zu denen für reguläre Abhängigkeiten mild sein. Sie sollten Ihre Peer-Abhängigkeiten nicht auf bestimmte Patch-Versionen beschränken. Es wäre wirklich ärgerlich, wenn ein Chai-Plugin von Chai 1.4.1 abhängt, während ein anderes von Chai 1.5.0 abhängt, einfach weil die Autoren faul waren und nicht die Zeit damit verbracht haben, die tatsächliche Mindestversion von Chai herauszufinden, die sie sind kompatibel mit.

Ruffin
quelle
4

Abhängigkeiten gegen Entwicklungsabhängigkeiten

Entwicklungsabhängigkeiten sind Module, die nur während der Entwicklung benötigt werden, während Abhängigkeiten zur Laufzeit erforderlich sind. Wenn Sie Ihre Anwendung bereitstellen, müssen Abhängigkeiten installiert werden, sonst funktioniert Ihre App einfach nicht. Bibliotheken, die Sie aus Ihrem Code aufrufen, mit dem das Programm ausgeführt werden kann, können als Abhängigkeiten betrachtet werden.

ZB reagieren, reagieren - dom

Dev-Abhängigkeitsmodule müssen nicht auf dem Produktionsserver installiert werden, da Sie nicht auf diesem Computer entwickeln werden. Compiler, die Ihren Code in Javascript, Testframeworks und Dokumentgeneratoren umwandeln, können als Dev-Abhängigkeiten betrachtet werden, da sie nur während der Entwicklung benötigt werden.

ZB ESLint, Babel, Webpack

@ FYI,

mod-a
  dev-dependents:
    - mod-b
  dependents:
    - mod-c

mod-d
  dev-dependents:
    - mod-e
  dependents:
    - mod-a

----

npm install mod-d

installed modules:
  - mod-d
  - mod-a
  - mod-c

----

checkout the mod-d code repository

npm install

installed modules:
  - mod-a
  - mod-c
  - mod-e

Wenn Sie auf npm veröffentlichen, ist es wichtig, dass Sie das richtige Flag für die richtigen Module verwenden. Wenn Ihr npm-Modul funktionieren muss, speichern Sie das Modul mit dem Flag "--save" als Abhängigkeit. Wenn Ihr Modul nicht funktionieren muss, aber zum Testen benötigt wird, verwenden Sie das Flag "--save-dev".

# For dependent modules
npm install dependent-module --save

# For dev-dependent modules
npm install development-module --save-dev
Selva Ganapathi
quelle
1

Wenn Sie versuchen, ein npm-Paket zu verteilen, sollten Sie die Verwendung vermeiden dependencies. Stattdessen müssen Sie in Betracht ziehen, es hinzuzufügen peerDependenciesoder daraus zu entfernen dependencies.

Melchia
quelle
1

Ich habe eine einfache Erklärung gefunden.

Kurze Antwort:

Abhängigkeiten "... sind diejenigen, die Ihr Projekt wirklich braucht, um in der Produktion arbeiten zu können."

devDependencies "... sind diejenigen, die Sie während der Entwicklung benötigen."

peerDependencies "Wenn Sie Ihre eigene Bibliothek erstellen und veröffentlichen möchten, damit sie als Abhängigkeit verwendet werden kann"

Weitere Details in diesem Beitrag: https://code-trotter.com/web/dependencies-vs-devdependencies-vs-peerdependencies

Benutzer braucht Hilfe
quelle