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?

Douglas Ludlow
quelle
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: [email protected]erfordert 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.

Migg
quelle
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
MrLehiste
quelle
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

Zoomlar
quelle
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

tiefes Element
quelle
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.

Joshweir
quelle
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

Carlos
quelle
-5

Führen Sie Folgendes aus: npm install-test

Ivan Ferrer
quelle