Wie installiere ich npm Peer-Abhängigkeiten automatisch?


274

Zum Beispiel, wenn ich Angular2 installiere:

npm install --save angular2
temp@1.0.0 /Users/doug/Projects/dougludlow/temp
├── angular2@2.0.0-beta.3 
├── UNMET PEER DEPENDENCY es6-promise@^3.0.2
├── UNMET PEER DEPENDENCY es6-shim@^0.33.3
├── UNMET PEER DEPENDENCY reflect-metadata@0.1.2
├── UNMET PEER DEPENDENCY rxjs@5.0.0-beta.0
└── UNMET PEER DEPENDENCY zone.js@0.5.11

npm WARN angular2@2.0.0-beta.3 requires a peer of es6-promise@^3.0.2 but none was installed.
npm WARN angular2@2.0.0-beta.3 requires a peer of es6-shim@^0.33.3 but none was installed.
npm WARN angular2@2.0.0-beta.3 requires a peer of reflect-metadata@0.1.2 but none was installed.
npm WARN angular2@2.0.0-beta.3 requires a peer of rxjs@5.0.0-beta.0 but none was installed.
npm WARN angular2@2.0.0-beta.3 requires a peer of zone.js@0.5.11 but none was installed.

Gibt es ein magisches Flag, das ich an npm übergeben kann, um auch die Peer-Abhängigkeiten zu installieren? Ich konnte keine finden ... Es ist mühsam, die Peer-Abhängigkeiten manuell zu kopieren und einzufügen und sicherzustellen, dass ich die richtigen Versionen habe.

Mit anderen Worten, ich müsste lieber nicht tun:

npm install --save angular2@2.0.0-beta.3 es6-promise@^3.0.2 es6-shim@^0.33.3 reflect-metadata@0.1.2 rxjs@5.0.0-beta.0 zone.js@0.5.11

Was ist der bessere Weg?


Haben Sie dieses Problem bereits gelöst? Ich habe das gleiche Problem bei der Installation von angle2. Selbst nach der manuellen Installation von es6-versprechen mit dem Flag -g und dem erneuten Versuch von npm install -g angle2 erhalte ich den gleichen Fehler / die gleiche Warnung von 5 nicht erfüllten Peer-Abhängigkeiten
Nttakr

4
@nttakr - Ja, wenn Sie die genauen Versionen installieren, die als Peer-Abhängigkeiten gewünscht werden, wird die Warnung entfernt. Sie möchten sie nicht global installieren (mit dem Flag -g). Sie möchten sie lokal installieren (-S-Flag), aber wie gesagt, es müssen die genauen Versionen sein (dh: angular2@2.0.0-beta.3erfordert es6-promise@^3.0.2). Ich möchte jedoch wissen, ob es einen Befehl / ein Flag gibt, mit dem die Peer-Abhängigkeiten automatisch installiert werden.
Douglas Ludlow

@DouglasLudlow Welche NPM-Version verwenden Sie?
Peteb

@peteb: npm -v=>3.5.3
Douglas Ludlow

Ich habe das gleiche Problem, und ich habe keine Lösungsausbeute gefunden ...
Youngwind

Antworten:


178

Die automatische Installation von Peer-Abhängigkeiten wurde mit npm 3 explizit entfernt, da sie mehr Probleme verursacht als versucht zu lösen. Sie können hier zum Beispiel darüber lesen:

Nein, aus den angegebenen Gründen können Sie sie ab npm 3 nicht automatisch installieren.


4
Ja, ich habe das gesehen: github.com/npm/npm/issues/6565 ... Ich hatte nur gehofft, dass Sie sie optional mit einer Flagge oder etwas anderem installieren können. Ich denke, ich muss eine Ausgabe öffnen oder so.
Douglas Ludlow

155
Wie gehen Sie mit solchen Problemen um? Ich bin kein npm-Experte. Wenn ich also lese "x erfordert einen Peer von y, aber keiner wurde gefunden", frage ich mich: "Welcher Peer?" und "wie kann ich einfach alles wieder zum Laufen bringen?" Gibt es einen Prozess? Stöbern Sie in den Codes von x und y, bis Sie herausfinden, was fehlt? Was machen Sie als Nächstes, wenn Sie herausgefunden haben, was fehlt? Vielen Dank!
Dan Cancro

81
Ah, es ist ein englisches Problem: "x erfordert einen Peer von y, aber keiner wurde installiert" sollte sein "x erfordert den Peer y, aber y wurde nicht installiert". Ich verstand es als "x erfordert einen von ys Peers, aber dieser Peer wurde nicht installiert und wir sagen Ihnen nicht, welchen von ys Peers Sie benötigen".
Dan Cancro

1
Auch wenn ich die aufgelisteten Peer-Abhängigkeiten manuell installiere, erhalte ich sie als extraneousPakete
plsnoban

3
Es gibt "fremd", weil Sie sie zu Ihren Paketabhängigkeiten hinzufügen müssen.
Dinoboff

37

Ich habe es gelöst, indem ich package.json mit den genauen Werten umgeschrieben habe.

npm WARN angular2@2.0.0-beta.3 requires a peer of es6-shim@^0.33.3 but none was installed.

package.json: "es6-shim": "^ 0.33.3",

npm WARN angular2@2.0.0-beta.3 requires a peer of reflect-metadata@0.1.2

package.json: "Reflect-Metadata": "0.1.2",

Delete node_modules directory

npm install

15
Vielleicht ist ein npm cache clean, npm installvielleicht besser als das Löschen von node_modules? Ich verzichte immer darauf, node_modules zu löschen. Ich möchte herausfinden, wo das Problem liegt, anstatt das Verzeichnis wegzublasen.
Bruno

Ich denke nicht, dass dies eine sehr sichere Idee für die Leute ist, es einfach zum Laufen zu bringen. Sie haben höhere Veränderungen bei der Verschärfung ihrer Konflikte: Sie haben Code, der nicht mit der Bibliothek übereinstimmt.
Zoomlar

Beim Versuch, npm clean cache auszuführen, wurde die folgende Fehlermeldung angezeigt: npm ERR! Ab npm @ 5 heilt sich der npm-Cache selbst von Korruptionsproblemen 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'. Wenn Sie dagegen ein Problem mit dem Installationsprogramm debuggen, können Sie npm install --cache /tmp/empty-cacheeinen temporären Cache verwenden, anstatt den eigentlichen zu löschen. npm ERR! npm ERR! Wenn Sie sicher sind, dass Sie den gesamten Cache löschen möchten, führen Sie diesen Befehl mit --force erneut aus.
Tarun

22

Cheat-Code hilfreich in diesem Szenario und einigen anderen ...

├── UNMET PEER DEPENDENCY @ angle / common @ 4.0.2

├── UNMET PEER DEPENDENCY @ angle / compiler @ 4.0.2

├── UNMET PEER DEPENDENCY @ angle / compiler-cli @ 4.0.2

├── UNMET PEER DEPENDENCY @ angle / core @ 4.0.2

├── UNMET PEER DEPENDENCY @ angle / forms @ 4.0.2

├── UNMET PEER DEPENDENCY @ angle / http @ 4.0.2

├── UNMET PEER DEPENDENCY @ angle / platform-browser @ 4.0.2

├── UNMET PEER DEPENDENCY @ angle / platform-browser-dynamic @ 4.0.2>

  1. Kopieren Sie Ihren Fehler und fügen Sie ihn in Ihren Code-Editor ein.
  2. Markieren Sie mit Ihrem Cursor einen unerwünschten Teil. In diesem Fall '├── UNMET PEER DEPENDENCY'
  3. Drücken Sie Befehl + d ein paar Mal.
  4. Drücken Sie löschen zweimal . (Drücken Sie die Leertaste, wenn Sie versehentlich '├── UNMET PEER DEPENDENCY' markiert haben.)
  5. Einmal nach oben drücken. Fügen Sie 'npm install' hinzu
  6. Einmal drücken. Add '--save
  7. Kopiere deine Sachen zurück in den Cli und renne

npm install @ angle / common @ 4.0.2 @ angle / compiler @ 4.0.2 @ angle / compiler-cli @ 4.0.2 @ angle / core @ 4.0.2 @ angle / forms @ 4.0.2 @ angle / http @ 4.0 .2 @ angle / platform-browser @ 4.0.2 @ angle / platform-browser-dynamic @ 4.0.2 --save


8
Die Option --saveist ab npm 5.0.0 offensichtlich nicht mehr erforderlich: stackoverflow.com/a/19578808/12484
Jon Schneider

12

Das Projekt npm-install-peerserkennt Peers und installiert sie.

Ab v1.0.1diesem Zeitpunkt wird das package.jsonautomatische Zurückschreiben nicht unterstützt , was unser Bedürfnis hier im Wesentlichen lösen würde.

Bitte fügen Sie Ihre Unterstützung für die Ausgabe im Flug hinzu: https://github.com/spatie/npm-install-peers/issues/4


36
Beim Laufen gab es mir diese Nachricht. This package doesn't seem to have any peerDependencies
Thabung

2
Ich habe die gleiche Nachricht.
Thibault Boursier

7
Soweit ich weiß, npm-install-peerswird installiert in peerDependenciesregistriert package.json. Es werden keine peerDependenciesAbhängigkeiten wie installiert angular2.
Nieselregen

Ja, zum zweiten @ drizzd-Kommentar: Ist npm-install-peersnur für die Installation der "peerDependencies"in package.json Ihres Projekts aufgeführten Datei vorgesehen. Sie versuchen, die "peerDependencies"in jeder Ihrer node_modules/<package>/package.jsonDateien aufgelisteten Dateien zu installieren , nicht Ihre direkten Peer-Abhängigkeiten.
Will Farley

5

Diese Fehler traten bei der Entwicklung eines npm-Pakets auf peerDependencies. Ich musste sicherstellen, dass alle peerDependenciesauch als aufgeführt waren devDependencies. Das Projekt würde die global installierten Pakete nicht automatisch verwenden.


Dies ist eine nette Lösung, da das einfache Hinzufügen zu 'Abhängigkeiten' etwas umständlich ist!
Ashot

0

Garn einlegen und dann laufen lassen

Garn global add install-peerdeps


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.