Wie behebe ich die Warnung npm UNMET PEER DEPENDENCY?

223

Ich bin unter Windows 10 mit Node 5.6.0 und npm 3.6.0. Ich versuche, Angular-Material und MDI in meinem Arbeitsordner zu installieren. npm install winkelmaterial mdi fehler mit:

+-- angular@1.5.0

+-- UNMET PEER DEPENDENCY angular-animate@^1.5.0

+-- UNMET PEER DEPENDENCY angular-aria@^1.5.0

+-- angular-material@1.0.6

+-- UNMET PEER DEPENDENCY angular-messages@^1.5.0 `-- mdi@1.4.57

npm WARN enoent ENOENT: no such file or directory, open
'C:\Users\xxxxx\Desktop\ngClassifieds\package.json' 

npm WARN angular-material@1.0.6 requires a peer of
angular-animate@^1.5.0 but none was installed. 

npm WARN angular-material@1.0.6 requires a peer of angular-aria@^1.5.0
but none was installed. 

npm WARN angular-material@1.0.6 requires a peer of
angular-messages@^1.5.0 but none was installed.

Wie löse ich das Problem, um AngularJS Material und MDI zu installieren?

Reza
quelle
Verursacht diese Art von Fehler ein Problem?
BlackHawk
Nicht für Reza, also ist es zu spät, aber für alle anderen ... Versuchen Sie Folgendes: npm view eckiges Material peerDependencies
peter70
1
Im Allgemeinen möchten Sie möglicherweise nicht immer eine nicht erfüllte Abhängigkeit auflösen. Zum Beispiel hat ein Paket eine Abhängigkeit von other-package@^1.5.0, und Sie haben [email protected] installiert. Möglicherweise müssen Sie die Version nicht zurücksetzen. Es ist besser zu testen, ob Sie tatsächlich Probleme mit der neueren Version haben.
John Pankowicz
1
Siehe auch Warum gibt es Peer-Abhängigkeiten?
Mikemaccana

Antworten:

203

npm installiert keine Peer-Abhängigkeiten mehr, daher müssen Sie sie manuell installieren. npm installFühren Sie einfach eine der erforderlichen Deps durch und versuchen Sie dann erneut, die Haupt-Deps zu installieren.


Auf Kommentar antworten:

In dieser Nachricht steht, welche Deps Sie vermissen

UNMET PEER DEPENDENCY angular-animate@^1.5.0 +-- 
UNMET PEER DEPENDENCY angular-aria@^1.5.0 +-- angular-material@1.0.6 +
UNMET PEER DEPENDENCY angular-messages@^1.5.0 `-- mdi@1.4.57` 

Also musst du npm install angular angular-animate angular-aria angular-material angular-messages mdi

Datsik
quelle
Gibt es eine Möglichkeit, die Deps für eckiges Material zu finden, damit ich sie installieren kann?
Reza
2
Müssen Sie diese neuen Abhängigkeiten zu Ihren hinzufügen package.json?
0xcaff
2
@caffinatedmonkey das wäre ideal
Datsik
9
@caffinatedmonkey, wenn Sie den --saveSchalter npm angeben , aktualisiert Ihre package.json für Sie (oder --save-devwenn das Paket eine Entwicklungsabhängigkeit ist)
McGuireV10
33
Ist es nicht der springende Punkt von npm, all diese Abhängigkeiten für Sie verwalten zu lassen? Wenn ich eine npm-Installation durchführe, erhalte ich eine Liste mit einer Reihe nicht erfüllter Abhängigkeiten, die ich manuell manuell zu meiner composer.json-Datei hinzufügen muss. Welchen Wert erhalte ich zu diesem Zeitpunkt überhaupt von npm?
ChiliNUT
66

UNMET PEER DEPENDENCYDer Fehler wird ausgelöst, wenn die Abhängigkeiten eines oder mehrerer in der package.jsonDatei angegebener Module nicht erfüllt sind. Überprüfen Sie die Warnungen sorgfältig und aktualisieren Sie die package.jsonDatei mit den richtigen Versionen der Abhängigkeiten.

Dann renne

rm -rf node_modules/
npm cache clean
npm install

Dadurch werden alle erforderlichen Abhängigkeiten korrekt installiert.

JayKrish
quelle
3
Was ist Peer-Abhängigkeit
aWebDeveloper
Wenn Sie ein Paket installieren, hängt dies möglicherweise von bestimmten Versionen anderer Pakete ab. Wenn Sie keine korrekte abhängige Version des Pakets angeben, ist "Peer-Abhängigkeit" nicht erfüllt. Sie müssen also die erwartete Version der abhängigen Pakete aktualisieren, um dies zu beheben.
JayKrish
4
Das hat bei mir nicht funktioniert. Ich habe immer noch eine Warnung erhalten, dass ein Peer benötigt wird.
Adam Zerner
1
Viel sauberer als die akzeptierte Lösung! Dieser eine Satz Code behandelt jeden möglichen Fall des Op-Problems anstelle des spezifischen Problems, das sie haben.
HoldOffHunger
Die Verwendung des Befehls npm cache clean gibt den Fehler aus: Ab npm @ 5 heilt sich der npm-Cache selbst von Beschädigungsproblemen und die aus dem Cache extrahierten Daten sind garantiert gültig. Wenn Sie sicherstellen möchten, dass alles konsistent ist, verwenden Sie stattdessen 'npm cache verify'. npm ERR! Wenn Sie sicher sind, dass Sie den gesamten Cache löschen möchten, führen Sie diesen Befehl mit --force erneut aus.
CodeMonkey
30

In meinem Fall waren alle Abhängigkeiten bereits vorhanden. Bitte aktualisieren Sie NPM in diesem Fall, da es möglicherweise abgestürzt ist. Es hat mein Problem gelöst.

npm install -g npm
Anuj Sharma
quelle
Hat für mich gearbeitet. Ich habe den Fehler UNMET PEER DEPENDENCY typescriptbeim Versuch der Installation erhalten tslint. Nach der Aktualisierung der npm musste zuerst typscript und dann tslint installiert werden.
Ravimallya
Aus irgendeinem Grund musste ich es mehr als einmal ausführen, bis alle seine eigenen Abhängigkeiten aktualisiert waren.
Coderer
Dies brach npm für mich und führte zu einer Reihe von Fehlern.
Jack
14

npm-install-peer hat für mich gearbeitet.

npm install -g npm-install-peers
alexoviedo999
quelle
1
Hat bei mir nicht funktioniert: "Dieses Paket scheint keine PeerDependencies zu haben". Ich habe jedoch mehrere Meldungen wie "npm ERR! Peer dep fehlt: @ angle / common @ ^ 5.0.0 || ^ 6.0.0, erforderlich von @ agm / core @ 1.0.0-beta.3"
Almir Campos
2
Dieses Paket installiert nur direkte Peer-Deps des aktuellen Pakets und stirbt nicht die Peer-Deps der Deps des Pakets (Peers von Kindern).
Alex Skrypnyk
7

Eine der wahrscheinlichsten Ursachen für diesen Fehler könnte sein, dass Sie in Ihrer package.json eine ältere Version definiert haben. Um dieses Problem zu lösen, ändern Sie die Versionen in package.json so, dass sie mit denen übereinstimmen, über die sich npm beschwert.

Sobald Sie fertig sind, führen Sie npm install und voila !! aus.

Thomas Mwania
quelle
6

Diese Antwort gilt nicht für alle Fälle. Wenn Sie den Fehler jedoch nicht durch einfaches Eingeben beheben können npm install , können diese Schritte hilfreich sein.

Nehmen wir an, Sie haben diesen Fehler erhalten.

UNMET PEER DEPENDENCY packageA@4.2.0

npm WARN packageB@3.3.0 requires a peer of packageA@^3.1.0 but none was installed.

Dies bedeutet, dass Sie Version 4.2.0 von packageA installiert haben, [email protected] jedoch Version 3.xx von pakageA benötigt. ( Erklärung von ^ )

Sie können diesen Fehler also beheben, indem Sie packageA auf 3.xx herabstufen. Normalerweise möchten Sie das Paket jedoch nicht herabstufen.
Die gute Nachricht ist, dass packageB in einigen Fällen einfach nicht mit packageA Schritt hält und der Betreuer von packageB versucht, die Peer-Abhängigkeit von packageA auf 4.xx zu erhöhen.
In diesem Fall können Sie überprüfen, ob es eine höhere Version von packageB gibt erfordert Version 4.2.0 von packageA in npm oder github.

Beispiel: Gehen Sie zur Release-SeiteGeben Sie hier die Bildbeschreibung ein

Oft finden Sie bahnbrechende Änderungen in Bezug auf solche Abhängigkeiten.

packageB v4.0.0-beta.0

BREAKING CHANGE
package: requires packageA >= v4.0.0

Wenn Sie auf der Release-Seite nichts finden, gehen Sie zur Ausgabeseite und suchen Sie das Problem nach Schlüsselwörtern wie peer. Möglicherweise finden Sie nützliche Informationen.

Geben Sie hier die Bildbeschreibung ein

Zu diesem Zeitpunkt haben Sie zwei Möglichkeiten.

1) Aktualisieren Sie auf die gewünschte Version
2) Lassen Sie den Fehler vorerst und warten Sie, bis die stabile Version veröffentlicht ist.

Wenn Sie Option 1 wählen:
In vielen Fällen hat die Version kein latest Tag und ist daher nicht stabil. Sie müssen also überprüfen, was sich in diesem Update geändert hat, und sicherstellen, dass nichts kaputt geht.

Wenn Sie Option 2 wählen:
Wenn das Upgrade von pakageA von Version 3 auf 4 trivial ist oder wenn der Betreuer von pakageB Version 4 von pakageA noch nicht getestet hat, aber sagt, dass dies kein Problem sein sollte, können Sie den Fehler möglicherweise in Betracht ziehen.

In beiden Fällen ist es am besten, gründlich zu testen, ob nichts kaputt geht.

Wenn Sie wissen möchten, warum Sie so etwas manuell ausführen müssen, wird dieser Link gut erklärt.

ohkts11
quelle
3

Ok, also habe ich lange gekämpft, um das herauszufinden. Hier ist die nukleare Option, wenn Sie alle anderen Möglichkeiten ausgeschöpft haben.

  • Erstellen Sie einen neuen Ordner auf Ihrem PC.
  • Laden Sie eine brandneue Installation von Angular herunter - ich habe diese Anleitung verwendet: https://coursetro.com/posts/code/55/How-to-Install-an-Angular-4-App
  • Führen Sie es aus und stellen Sie sicher, dass es funktioniert
  • Installieren Sie dann Ihre Abhängigkeiten nacheinander aus Ihrer package.json-Datei
  • Führen Sie es aus, nachdem jeder installiert wurde

Wenn Sie fertig sind und es immer noch funktioniert, importieren Sie Ihren eigentlichen Code in dieses neue Projekt. Beheben Sie alle Kompilierungsfehler, die die neuere Version der Winkelursachen verursacht.

Das hat es für mich getan. 1 Stunde Nacharbeit im Vergleich zu 6 Stunden Versuch, WTF herauszufinden, war falsch. Ich wünschte, ich hätte es so gemacht, um anzufangen.

user230910
quelle
OP verwendet AngularJS
Edric
3

Die gegebene Antwort wird nicht immer funktionieren. Wenn es Ihr Problem nicht behebt. Stellen Sie sicher, dass Sie auch das richtige Symbol in Ihrem verwenden package.json. Dies ist sehr wichtig, um diese Kopfschmerzen zu beheben. Beispielsweise:

warning " > @angular/[email protected]" has incorrect peer dependency "typescript@>=2.4.2 <2.7".
warning " > [email protected]" has incorrect peer dependency "typescript@>=2.4.2 <2.6".

Mein Typoskript muss also zwischen 2.4.2 und 2.6 liegen, oder?

Also habe ich meine Typoskriptbibliothek von using "typescript": "^2.7"auf using geändert "typescript": "^2.5". Scheint richtig?

Falsch.

Das ^bedeutet, dass Sie mit npm mit "typescript": "2.5"oder "2.6"oder "2.7"etc in Ordnung sind ...

Wenn Sie möchten , erfahren , was das ^und ~es bedeutet , siehe: Was ist der Unterschied zwischen Tilde (~) und Caret (^) in package.json?

Außerdem müssen Sie sicherstellen, dass das Paket vorhanden ist. Möglicherweise "typescript": "2.5.9"werden die Paketnummern nicht nachgeschlagen. Um wirklich sicher zu sein, entfernen Sie einfach das ~oder das, ^wenn Sie nicht lesen möchten, was sie bedeuten.

Samuel Thompson
quelle
Vielen Dank für diese Erklärung. Was passiert, wenn ich zwei Bibliotheken verwende, in denen die erste (z. B. library-one) zB einen Peer von package@<2.6und die andere ( library-two) einen Peer von verwendet package@>2.7? Muss ich mich dann mit zwei Versionen packagein meiner Codebasis befassen ? Woher weiß ich, dass ich library-onees [email protected]während der Verwendung verwenden library-twomuss, während ich es verwenden muss [email protected]?
Tonix
2

Heute verfügbar Angular 2 rc.7 , und ich hatte ein ähnliches Problem mit [email protected]UNMET PEER DEPENDENCY.

Wenn Sie, wie ich, einfach ersetzt @angular/...rc.6zu @angular/...rc.7- es ist nicht genug. Weil zum Beispiel @angular/routerkeine rc.6Version hat.

In diesem Fall bessere Bewertung package.json in Schnellstart

ktretyak
quelle
OP verwendet AngularJS
Edric
-6

Sie können das Problem beheben, indem Sie die UNMET-Abhängigkeiten global installieren.

Beispiel: npm install -g @ angle / common @ 4.4.6

installieren Sie jeden nach dem anderen. Es hat bei mir funktioniert.

Srinivas Jatoth
quelle
Ist das wirklich die beste Lösung, dachte ich? Globale Installation, um das eigentliche "Problem" für Projektabhängigkeiten zu ignorieren?
Qx3
1
Dadurch werden Abhängigkeiten global auf Ihrem Computer installiert. Ihre Kollegen können dies in einer gemeinsam genutzten Umgebung nicht berücksichtigen.
AC Patrice