npm install installiert keine devDependencies

256

Unter Windows werden aus irgendeinem Grund beim Ausführen npm installkeine devDependencies installiert . AFAIK sollte es. Wenn ich npm install --dev devDependencies ausführe, werden diese installiert. Ich verstehe nicht, warum npm installnicht auch devDependencies installiert , sondern nur Abhängigkeiten. Was könnte der Grund sein? Wie kann ich es reparieren?

Vielleicht stimmt etwas mit meinem package.json nicht ? Es ist unten aufgeführt, wenn es hilfreich sein kann:

{
  "name": "try-brunch",
  "version": "0.1.0",
  "private": "true",
  "devDependencies": {
    "brunch": "^2.0.4",
    "cssnano-brunch": "^1.1.5",
    "javascript-brunch": "^1.8.0",
    "sass-brunch": "^1.9.2",
    "uglify-js-brunch": "^1.7.8"
  },
  "dependencies": {
    "jquery": "^2.1.4"
  }
}
Tristan Tzara
quelle
5
Warum brauchen wir überhaupt eine Lösung dafür? Es sollte die Standardeinstellung sein! devDependenciessind buchstäblich Abhängigkeiten für die Entwickler des Moduls . Ich wette, die meisten von uns haben npm installein Modul, um es zu verwenden, anstatt es zu entwickeln.
7онстант .н Ван
Angenommen, Sie schreiben eine App und benötigen einen Logger oder ein Webpack-Plugin. das sind devdeps. diese müssen installiert werden. npm installiert diese in einigen Fällen nicht.
Tristan Tzara
1
Ich meine, die Installation für devDependencieswird nur benötigt, wenn Sie das Paket (Anwendung) schreiben . Für die Verwendung ist das nicht erforderlich devDependencies. So ist es sinnvoll für devDependencieszusätzliche Flags erfordern installiert werden. Wenn npm installinstalliert devDependencies standardmäßig die Benutzer erhalten würden redundante Pakete auch.
8онстантин Ван
Das dokumentierte Verhalten ist, dass wenn ich es npm iin meinem Ordner mache, es py greift package.jsonund sowohl deps als auch devdeps installiert. Dies ist die Art und Weise, wie es funktionieren soll und es macht Sinn (z. B. wenn ich es tue, npm inachdem git cloneich erwartet habe, alles zu haben, was ich brauche, einschließlich zB Webpack-Plugins). Diese Frage behebt einen Fehler, wenn sich das tatsächliche Verhalten vom beabsichtigten unterscheidet. Bitte werfen Sie einen Blick auf docs - docs.npmjs.com/cli/install . Es gibt ein Flag, um devdeps nicht zu installieren, aber das Standardverhalten ist, sie zu installieren, was durchaus Sinn macht und das ist, was jeder erwartet
Tristan Tzara
Ich sehe keine vernünftigen Gründe, mich daran zu erinnern, bei jedem Abrufen einen anderen Befehl zum Installieren auszuführen, z. B. Webpack-Plugins oder Defs vom Typ Typoskript oder andere Devdeps. npm i sollte beides booten, was das beabsichtigte, vernünftige und dokumentierte Verhalten ist, also verstehe ich ehrlich gesagt nicht, warum Sie sagen, dass dieses Problem ein Standard sein sollte
Tristan Tzara

Antworten:

306

Überprüfen Sie die NPM-Dokumente auf Installation

Mit dem --productionFlag (oder wenn die Umgebungsvariable NODE_ENV auf Produktion gesetzt ist) installiert npm keine in devDependencies aufgelisteten Module. "

Das --only={prod[uction]|dev[elopment]}Argument bewirkt, dass unabhängig vom NODE_ENV entweder nur devDependencies oder nur Nicht-devDependencies installiert werden. "

Hast du es versucht

npm install --only=dev

Wenn Sie befürchten, dass Ihre package.json falsch ist, tun Sie dies am besten. Erstellen Sie einen neuen Ordner und führen Sie Folgendes aus:

npm init --yes

Dann:

npm install --save-dev brunch@^2.0.4
npm install --save-dev cssnano-brunch@^1.1.5
npm install --save-dev javascript-brunch@^1.8.0
npm install --save-dev sass-brunch@^1.9.2
npm install --save-dev uglify-js-brunch@^1.7.8
npm install jquery@^2.1.4 --save

Und du solltest gut gehen! Andernfalls werden weiterhin andere Optionen veröffentlicht.

Überprüfen Sie Ihre npm-Konfiguration:

npm config list

npm ruft seine Konfigurationseinstellungen über die Befehlszeile, Umgebungsvariablen und npmrc-Dateien ab. Überprüfen Sie also die Umgebungsvariablen und die npmrc- Datei.

Immer noch scheitern?

Ok, erstellen Sie einen neuen Ordner, idealerweise an einer anderen Stelle in Ihrem Dateisystem. dh. nicht in derselben Ordnerhierarchie. Zum Beispiel C: \ myNewFolder - je näher an der Basis C: fahren, desto besser.

Dann renne:

npm init --yes

Führen Sie jetzt aus:

npm install underscore --save

und schlussendlich:

npm install mocha --save-dev

Funktioniert alles wie erwartet?

Ich versuche zu verstehen, ob Ihr Problem global oder lokal für den vorherigen Ordner und die Abhängigkeiten ist.

arcseldon
quelle
Tristan - hilft das Ihrer Situation? Können Sie die Antwort als richtig markieren oder mir das Ergebnis des oben genannten Versuchs mitteilen?
Arcseldon
2
npm install --only = dev installiert devdeps, aber ich möchte sowohl deps als auch devdeps gleichzeitig installieren. package.json scheint in Ordnung zu sein, da die Neuerstellung nichts ändert. Habe ich Recht, dass NODE_ENV sowohl global als Standardwert als auch lokal als Wert für das Projekt existiert? Wo kann ich diese Werte unter Windows überprüfen und ändern (ich habe nachgesehen und ich habe keine Systemvariable NODE_ENV)
Tristan Tzara
@TristanTzara - ich arbeite heutzutage fast ausschließlich auf MAC. Aus Erinnerungen an vergangene Tage (vor Jahren unter NT und XP) können Sie jedoch etwas wie "set" in das Eingabeaufforderungsfenster eingeben. Andernfalls gehen Sie zu "Systemeigenschaften" -> "Erweitert" -> "Umgebungsvariablen" und überprüfen Sie dort Ihre Eingaben . Sie suchen einen "Schlüssel" mit NODE_ENV. Ich werde jetzt für eine Windows-Option googeln, habe dies aber gepostet, falls es hilft.
Arcseldon
Link hier - winaero.com/blog/…
arcseldon
@TristanTzara - das ist gut zu wissen. Ein Gedanke: Überprüfen Sie alle übergeordneten Verzeichnisse über Ihrem Verzeichnis, die nicht funktionieren. Suchen Sie nach einem vorhandenen node_modules-Ordner ... npm sucht nach oben, wenn Sie versuchen, eine Abhängigkeit aufzulösen, und es kann etwas Seltsames sein, als würde es ein vorhandenes installiertes Modul weiter oben im Verzeichnisbaum aufheben und sich daher weigern, Ihr Modul im untergeordneten Ordner zu installieren . Der übliche Ort befindet sich direkt unter Ihrem Home-Verzeichnis. Viel Glück und
vielen
85

Überprüfen Sie, ob der Produktionswert für npm config auf true gesetzt ist. Wenn dieser Wert wahr ist, werden die Entwicklungsabhängigkeiten übersprungen.

Lauf npm config get production

So stellen Sie es ein: npm config set -g production false

Shawn Mclean
quelle
Ich frage mich, ob irgendwo zwischen npm 5.x und npm 6.x, wenn kein Wert festgelegt wurde, der Standardwert trueeher als false?
James Perih
38

Stellen Sie sicher, dass die env-Variable nicht NODE_ENVauf 'Produktion' gesetzt ist.

In diesem Fall werden Entwicklungsabhängigkeiten nicht ohne das --devFlag installiert

Nir Levy
quelle
Ich habe mir meine Systemvariablen angesehen und habe diese nicht einmal dort. Vielleicht schaue ich am falschen Ort?
Tristan Tzara
13
Bitte beachten Sie, dass npm install --devdevDependencies rekursiv installiert wird . Dies ist fast nie das, was Sie wollen, und ist in der Tat veraltet .
Wonko
Danke dir. Ich wusste nicht, dass sich dies auf reguläre npm-Installationen auswirken würde, aber es ist logisch. :)
Lothre1
6
Die Verwendung der --devOption ist veraltet. Verwenden Sie --only=devstattdessen
Sarath Ak
16

Ich hatte eine package-lock.jsonDatei aus einer alten Version meiner package.json, habe diese gelöscht und dann alles korrekt installiert.


quelle
Bingo! Das hat mein Problem gelöst. Sieht so aus, als hätten wir das in das Repo übernehmen sollen.
randomor
9

Ich hatte ein ähnliches Problem. npm install --only=devhat nicht funktioniert und auch nicht npm rebuild. Letztendlich musste ich löschen node_modulesund erneut package-lock.jsonausführen npm install. Das hat es für mich behoben.

obsessiver Programmierer
quelle
7

Sie können den kurzen Weg für Installationsabhängigkeiten nur für die Entwicklung wie folgt verwenden:

npm i -D <dependencies-names>
Ale
quelle
beste Antwort. Shpuld an der Spitze sein
wwwwwwwwwwww
6

Stellen Sie sicher, dass Ihre package.jsongültig ist ...

Ich hatte den folgenden Fehler ...

npm WARN Invalid name: "blah blah blah"

und das führte ebenfalls dazu, dass es devDependenciesnicht installiert wurde.

Zu Ihrer Information, ändern Sie den package.json"Namen", um blah-blah-blahes zu beheben.

Alex Gray
quelle
0

Ich habe das gleiche Problem, weil ich das NODE_ENV=productionbeim Erstellen von Docker festgelegt habe. Dann füge ich noch eine hinzu npm install --only=dev. Alles funktioniert gut. Ich benötige die devDependencies zum Erstellen von TypeSciprt-Modulen

RUN npm install
RUN npm install --only=dev
Phat Tran Ky
quelle