Warum sagt npm install, dass ich nicht erfüllte Abhängigkeiten habe?

404

Ich habe ein Knotenpaket. Wenn ich npm installvom Paketstamm aus starte, werden einige Dinge installiert, aber dann werden mehrere Fehlermeldungen ausgegeben, die folgendermaßen aussehen:

npm WARN unerfüllte Abhängigkeit / Users / seanmackesey / google_drive / code / explore / generator / knotenmodule / findup-sync / knotenmodule / glob erfordert graceful-fs@'~1.2.0 ', wird aber geladen

Ich muss verwirrt sein, was genau npm installtut. Wenn eine Abhängigkeit erkannt wird, sollte sie dann nicht installiert werden? Unter welchen Bedingungen werden mir solche Fehlermeldungen angezeigt, und wie kann ich die Abhängigkeiten auflösen?

Sean Mackesey
quelle

Antworten:

397

Ich glaube, das liegt daran, dass die Abhängigkeitsauflösung etwas kaputt ist, siehe https://github.com/npm/npm/issues/1341#issuecomment-20634338

Folgende sind die mögliche Lösung:

  1. Manuell müssen die Module der obersten Ebene installiert werden, die nicht erfüllte Abhängigkeiten enthalten: npm install [email protected]

  2. Strukturieren Sie Ihre package.json neu. Platzieren Sie alle übergeordneten Module (dient als Abhängigkeit für andere Module) unten.

  3. Führen Sie den npm installBefehl erneut aus.

Das Problem kann dadurch verursacht werden, dass npm das gesamte Paket aufgrund einer Zeitüberschreitung oder aus anderen Gründen nicht herunterladen kann.

Hinweis: Sie können die fehlgeschlagenen Pakete auch manuell mit installieren npm install [email protected].

Vor dem npm installAusführen können die folgenden Schritte hilfreich sein:

  • Entfernen Sie node_modules mit rm -rf node_modules/
  • Lauf npm cache clean

Warum ist es manchmal notwendig, "node_modules zu entfernen"? Wenn ein verschachteltes Modul während der Installation nicht installiert werden kann, erkennt das npm installnachfolgende Modul npm installdie fehlenden verschachtelten Abhängigkeiten nicht.

In diesem Fall reicht es manchmal aus, die Abhängigkeit der obersten Ebene der fehlenden verschachtelten Module zu entfernen und npm installerneut auszuführen . Sehen

dule
quelle
22
Durch das Entfernen der Knotenmodule und das Bereinigen des Caches funktionierte es für mich.
MarkoHiel
4
Das Entfernen von 'node_modules', das Ausführen von 'npm cache clean' und das anschließende Ausführen von 'npm install' haben mein Problem behoben. Ich musste 'npm_install' dreimal ausführen, bis alle Abhängigkeiten fehlerfrei geladen waren.
Hendrix
2
Wenn npm cache cleandies aus Zugriffsgründen nicht funktioniert, versuchen Sie es sudo npm cache clean.
Soroush
12
@Soroush blindes Hinzufügen von Sudo zu Dingen, die nicht richtig funktionieren, behebt sie nicht auf magische Weise, sondern bedeutet nur, dass Sie nicht wissen, was los ist.
Edgar Aroutiounian
5
Warum enthält jemals eine andere "Lösung" für npm rm r node_modules? und warum ist dies in den meisten Fällen wirklich die einzige Option? So sollte ein Paketmanager nicht funktionieren
phil294
83

Es ist mir passiert, als das WIFI während eines npm install. Durch Entfernen node_modulesund erneutes Ausführen wurde das Problem npm installbehoben.

Geon
quelle
26
und versuchen npm cache clean.
ijse
5
Eine Neuinstallation des Knotens ist wahrscheinlich nicht erforderlich, aber zwischen dem Ausführen npm cache cleanund dem Entfernen node_moduleshat dieser Rat für mich funktioniert.
RichLitt
@RichLitt, Ja, das npm cache cleanwar nicht genug für mich, ich musste das ebenfalls entfernen node_modules, damit es funktioniert, nachdem das Netzwerk während der "Installation" fehlgeschlagen war.
Mark Tomlin
Ich bin verwirrt, welches node_modulesVerzeichnis ich entfernen soll. Ich habe ein ähnliches Problem mit dem Fehler/usr/local/lib/node_modules/npm/node_modules/read-installed/node_modules/readdir-scoped-modules requires graceful-fs@'^4.1.2'
wuliwong
1
@wuliwong Die oberste Ebene.
Geon
33

Ich habe das Problem mithilfe dieser Befehlszeilen behoben

  • $ rm -rf node_modules/
  • $ sudo npm update -g npm
  • $ npm install

Es ist fertig!

Zatamin
quelle
5
Nachdem ich sudo npm update -g npm ausgeführt habe, wurde meine npm unbrauchbar gemacht. Jeder Versuch, etwas zu installieren, führt zu "npm ERR! Kann das Modul 'read-package-json' nicht finden. Ich muss dies abstimmen
MichaelB
Es hat für mich und für andere Leute funktioniert, vielleicht haben Sie ein anderes Problem. Versuchen Sie, das Modul read-package-json global zu sudo npm install -g read-package-jsoninstallieren, oder installieren Sie Ihr npm
zatamine
8
Vorbehalt: Sie sollten sudo nicht mit verwenden npm. Es wird stattdessen empfohlen, die Berechtigungen oder den Besitz des Verzeichnisses zu ändern, das npm auch schreiben möchte.
Sgnl
1
Vielleicht möchten Sie dort auch "npm cache clean" hinzufügen
Alexander Mills
1
Nicht sudomit npm
Grant
11

Ein Upgrade von NPM auf die neueste Version kann dabei sehr hilfreich sein. Die obige Antwort von dule ist richtig zu sagen, dass das Abhängigkeitsmanagement etwas kaputt ist, aber es scheint, dass dies hauptsächlich für ältere Versionen von npm gilt.

Der Befehl npm listgibt Ihnen eine Liste aller installierten node_modules. Beim Upgrade von Version 1.4.2 auf Version 2.7.4 wurden viele Module, mit denen zuvor gekennzeichnet WARN unmet dependencywurde, nicht mehr als solche gekennzeichnet.

Um npm zu aktualisieren, sollten Sie npm install -g npmunter MacOSX oder Linux eingeben. Unter Windows stellte ich fest, dass das erneute Herunterladen und Ausführen des Installationsprogramms von nodejs eine effektivere Methode zum Aktualisieren von npm darstellt.

stephen
quelle
Ich hatte das gleiche Problem mit der in CentOS 7-Repos verteilten npm-Version. Ich habe die neueste npm-Version von node.js installiert und das Problem ist verschwunden. Ich denke, Sie haben Recht, es kann ein Problem mit einer alten Version sein.
Elouan Keryell-Even
9

Die obigen Antworten haben mir auch nach dem Löschen des node_modulesVerzeichnisses nicht vollständig geholfen .

Der folgende Befehl hat mir endlich geholfen:

npm config set registry http://registry.npmjs.org/

Beachten Sie, dass dadurch Knotenmodule über eine unsichere HTTP-Verbindung abgerufen werden.

Src: https://stackoverflow.com/a/13119867/4082503

Vinay Vemula
quelle
Dies half mir und mein Gastgeber leitete den Verkehr um.
Dimiguel
1
@ Dimgl schön zu wissen :)
Vinay Vemula
1
@Dejel hast du auch die anderen Antworten ausprobiert. Möglicherweise müssen Sie npm installmehrere Knotenpakete einzeln ausführen und / oder manuell installieren.
Vinay Vemula
4

Für jeden -- UNMET PEER DEPENDENCY, zum Beispiel. -- UNMET PEER DEPENDENCY [email protected]Installieren Sie diese Abhängigkeit mit, npm install --save [email protected]bis Sie keine mehr haben UNMET DEPENDENCIES.

Viel Glück.

Akash
quelle
1
Lässt mich mit den gleichen Fehlern einschließlich eines neuen:ERR! code 1
Wouter Vanherck
1
@WouterVanherck kannst du bitte versuchen rm -rf node_modules, dann npm cache cleanund npm install. Wenn es immer noch nicht funktioniert, empfehle ich Ihnen rm -rf node_modules, es dann npm i -g yarnund dann noch einmal zu tun yarn install. Garn ist ziemlich gut zu handhaben node_modules. Viel Glück.
Akash
1
Ja, dafür ist peerDependencieses da. Um Sie zu einer bewussten Wahl der Version zu drängen.
Kamafeather
3

Ich habe npm listalle als UNMET DEPENDENCY aufgeführten Pakete ausgeführt und installiert

Zum Beispiel:

├── UNMET DEPENDENCY css-loader@^0.23.1
npm install css-loader@^0.23.1

Achasinh
quelle
2

Das hat es für mich gelöst:

  1. Korrigieren Sie die Versionsnummern package.jsonentsprechend den Fehlern.
  2. Entfernen Sie node_modules( rm -rf node_modules);
  3. Wiederholen npm install.

Wiederholen Sie diese Schritte, bis keine Fehler mehr auftreten.

user1585939
quelle
1

In ähnlicher Weise würde ich einen weiteren Schritt hinzufügen.

Beachten Sie, dass bei npm-Version> 1.4.9 'npm install' devDependencies installiert. Versuchen Sie zunächst, vorhandene Module und den Cache zu entfernen:

remove node_modules $ rm -rf node_modules/
run $ npm cache clean

Dann versuche es:

npm install --dev
npm update --dev

Dadurch wird zumindest die rekursive Abhängigkeitsauflösung aufgelöst.

John Doe
quelle
6
Wofür ist die --dev Flagge?
Alexander Mills
1

--dev Installation von devDependencies rekursiv (und es läuft für immer ..) Wie kann es helfen, die Versionsunterschiede zu beheben?

Sie können versuchen, den Ordner node_moduls zu entfernen, dann den npm-Cache zu bereinigen und dann 'npm i' erneut auszuführen

Arielhad
quelle
1

Ich hatte ein ähnliches Problem bei der Installation der React Native CLI. Ich war mir nicht sicher, welches /node_modulesVerzeichnis ich entfernen sollte, nachdem ich die Antworten hier gelesen hatte. Ich bin schließlich einfach gerannt

npm update -g

und konnte das Paket danach installieren.

wuliwong
quelle
1

Ich habe versucht, an einem automatisierten Bereitstellungssystem zu arbeiten, das ausgeführt wird npm install, sodass viele dieser Lösungen in einem automatisierten Modus nicht für mich funktionieren würden. Ich war nicht in der Lage, zu löschen / neu zu erstellen, node_modules/noch konnte ich Node.js Versionen leicht ändern.

Am Ende lief ich also npm shrinkwrap- fügte die npm-shrinkwrap.jsonDatei meinem Bereitstellungspaket hinzu und führte von dort aus Installationen aus. Das hat das Problem für mich behoben; Mit der Shrinkwrap-Datei als "Helfer" schien npm in der Lage zu sein, die richtigen Pakete zu finden und sie für mich zu installieren. (Shrinkwrap hat auch andere Funktionen, aber dafür brauchte ich es in diesem speziellen Fall).

Uberbrady
quelle
1

Ich habe dieses Problem bei der Installation von Reaktionspaketen festgestellt und dies hat bei mir funktioniert: npm install --save <package causing this error>

korp
quelle
1

In meinem Fall hat das Update von npm das Problem gelöst.

sudo npm install -g npm
Marcelo Gumiero
quelle
1

npm installinstalliert alle Pakete von npm-shrinkwrap.json, ignoriert jedoch möglicherweise Pakete in package.json, wenn sie in der ersteren nicht voreingestellt sind.

Wenn Ihr Projekt über eine verfügt npm-shrinkwrap.json, stellen Sie sicher, dass Sie sie ausführen npm shrinkwrap, um sie jedes Mal neu zu generieren, wenn Sie Hinzufügen / Entfernen / Ändern hinzufügen package.json.

Marius
quelle
0

Aktualisierung auf 4.0.0

Das Aktualisieren auf 4 ist so einfach wie das Aktualisieren Ihrer Angular-Abhängigkeiten auf die neueste Version und das Überprüfen, ob Sie Animationen wünschen. Dies funktioniert für die meisten Anwendungsfälle.

Unter Linux / Mac:

npm install @angular/{common,compiler,compiler-cli,core,forms,http,platform-browser,platform-browser-dynamic,platform-server,router,animations}@latest typescript@latest --save 

Unter Windows:

npm install @angular/common@latest @angular/compiler@latest @angular/compiler-cli@latest @angular/core@latest @angular/forms@latest @angular/http@latest @angular/platform-browser@latest @angular/platform-browser-dynamic@latest @angular/platform-server@latest @angular/router@latest @angular/animations@latest typescript@latest --save

Führen Sie dann den normalerweise verwendeten Befehl ng serve oder npm start aus, und alles sollte funktionieren.

Wenn Sie sich auf Animationen verlassen, importieren Sie das Neue BrowserAnimationsModuleaus @angular/platform-browser/animationsIhrem Stammverzeichnis NgModule. Ohne dies wird Ihr Code kompiliert und ausgeführt, aber Animationen lösen einen Fehler aus. Importe aus @angular/corewaren veraltet, verwenden Sie Importe aus dem neuen Paket

import { trigger, state, style, transition, animate } from '@angular/animations';.
Aman Agnihotri
quelle