Come installare automaticamente le dipendenze peer npm?


274

Ad esempio, quando installo Angular2:

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.

C'è una bandiera magica che posso passare a npm che installerà anche le dipendenze tra pari? Non sono stato in grado di trovarne uno ... È noioso copiare e incollare manualmente le dipendenze tra pari e assicurarsi di disporre delle versioni corrette.

In altre parole, preferirei non dover fare:

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

Qual è il modo migliore?


Hai già risolto questo problema? Ho lo stesso problema con l'installazione di angular2. Anche dopo aver installato manualmente es6-promise con -g flag e riprovando npm install -g angular2 ottengo lo stesso errore / avviso di 5 dipendenze peer non soddisfatte es6-promise, es6-shim, riflettono metadati, rxjs e zone.js
nttakr

4
@nttakr: sì, l'installazione delle versioni esatte che desidera mentre le dipendenze tra pari eliminano l'avviso. Non vuoi installarli a livello globale (con il flag -g). Volete installarli localmente (-S flag), ma come ho detto, devono essere le versioni esatte (cioè: angular2@2.0.0-beta.3richiede es6-promise@^3.0.2). Tuttavia, voglio sapere se esiste un comando / flag che installa automaticamente le dipendenze peer.
Douglas Ludlow,

@DouglasLudlow quale versione di NPM stai usando?
Peteb,

@peteb: npm -v=>3.5.3
Douglas Ludlow

Ho lo stesso problema e non ho trovato la soluzione resa ...
youngwind

Risposte:


178

L'installazione automatica delle dipendenze tra pari è stata esplicitamente rimossa con npm 3, poiché causa più problemi di quanti ne abbia tentati di risolvere. Puoi leggerlo qui per esempio:

Quindi no, per i motivi indicati, non è possibile installarli automaticamente con npm 3 verso l'alto.


4
Sì, ho visto questo: github.com/npm/npm/issues/6565 ... Speravo solo che tu potessi ancora installarli facoltativamente con una bandiera o qualcosa del genere. Immagino che dovrò aprire un problema o qualcosa del genere.
Douglas Ludlow,

157
Come gestisci questo tipo di problema? Non sono un esperto di npm, quindi quando leggo "x richiede un peer di y ma nessuno è stato trovato", mi chiedo "quale peer?" e "come posso semplicemente far funzionare di nuovo tutto?" C'è un processo? Scavi nel codice di xey finché non scopri cosa manca? Quando scopri cosa manca, cosa fai dopo? Grazie!
Dan Cancro,

81
Ah, è un problema inglese: "x richiede un peer di y ma nessuno è stato installato" dovrebbe essere "x richiede il peer, y, ma y non è stato installato". L'ho capito come "x richiede uno dei peer di y ma quel peer non è stato installato e non ti stiamo dicendo di quale peer di y hai bisogno".
Dan Cancro,

1
Inoltre, se installo manualmente le dipendenze peer elencate, le ottengo come extraneouspacchetti
plsnoban

3
Ci sono "estranei" perché è necessario aggiungerli alle dipendenze dei pacchetti.
Dinoboff l'

37

L'ho risolto riscrivendo package.json con i valori esatti che gli avvertimenti riguardavano:

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: "reflection-metadata": "0.1.2",

Delete node_modules directory

npm install

15
Forse an npm cache clean, npm installpotrebbe essere meglio che cancellare node_modules? Mi astengo sempre dall'eliminazione di node_modules, mi piace scoprire qual è il problema piuttosto che eliminare la directory.
Bruno,

Non penso che questa sia un'idea molto sicura per le persone che vogliono solo farlo funzionare. Hanno maggiori cambiamenti nel peggiorare i loro conflitti: avere un codice che non corrisponde alla sua libreria.
zoomlar,

È stato visualizzato il seguente messaggio di errore durante il tentativo di eseguire npm clean cache: npm ERR! A partire da npm @ 5, la cache npm si auto-guarisce da problemi di corruzione e i dati estratti dalla cache sono garantiti come validi. Se vuoi assicurarti che tutto sia coerente, usa invece 'npm cache verifica'. D'altra parte, se si sta eseguendo il debug di un problema con il programma di installazione, è possibile npm install --cache /tmp/empty-cacheutilizzare una cache temporanea anziché eseguire il nuking di quella effettiva. npm ERR! npm ERR! Se sei sicuro di voler eliminare l'intera cache, riesegui questo comando con --force.
Tarun,

22

Cheat code utile in questo scenario e alcuni altri ...

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

├── UNMET PEER DEPENDENCY @ angular / compilatore @ 4.0.2

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

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

├── UNMET DEPENDENCY PEER @ angolare / forme @ 4.0.2

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

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

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

  1. copia e incolla il tuo errore nel tuo editor di codice.
  2. Evidenzia una parte indesiderata con il tuo cursore. In questo caso "├── UNMET PEP DEPENDENCY"
  3. Premi comando + d un sacco di volte.
  4. Premi due volte Elimina . (Premere la barra spaziatrice se si è evidenziato inavvertitamente "├── UNMET DEPENDENCY PEER".)
  5. Premi una volta. Aggiungi 'npm install'
  6. Premere una volta verso il basso. Aggiungi '--save
  7. Copia le tue cose nel cli ed esegui

npm installa @ angolare / comune @ 4.0.2 @ angolare / compilatore @ 4.0.2 @ angolare / compilatore-cli @ 4.0.2 @ angolare / core @ 4.0.2 @ angolare / forme @ 4.0.2 @ angolare / http @ 4.0 .2 @ angular / platform-browser @ 4.0.2 @ angular / platform-browser-dynamic @ 4.0.2 --save


8
L'opzione --saveè, evidentemente, non è più necessaria in quanto di NPM 5.0.0: stackoverflow.com/a/19578808/12484
Jon Schneider

12

Il progetto npm-install-peersrileverà i peer e li installerà.

Al v1.0.1momento non supporta la riscrittura in package.jsonautomatico, il che essenzialmente risolverebbe il nostro bisogno qui.

Aggiungi il tuo supporto per l'emissione in volo: https://github.com/spatie/npm-install-peers/issues/4


36
Sulla corsa, mi ha dato questo messaggio. This package doesn't seem to have any peerDependencies
Thabung,

2
Ho lo stesso messaggio
Thibault Boursier,

7
A quanto ho capito, npm-install-peersverrà installato peerDependenciesregistrato in package.json. Non installerà peerDependenciesdipendenze come angular2.
drizzd,

Sì, al secondo commento di @drizzd: npm-install-peersè destinato esclusivamente all'installazione dell'elenco "peerDependencies"nel package.json del progetto. Stai tentando di installare i file "peerDependencies"elencati in ognuno di essi node_modules/<package>/package.json, non le dipendenze dei peer diretti.
Will Farley,

5

Ho riscontrato questi errori durante lo sviluppo di un pacchetto npm che aveva peerDependencies. Ho dovuto garantire che anche tutti peerDependenciesfossero elencati come devDependencies. Il progetto non utilizzerà automaticamente i pacchetti installati a livello globale.


Questa è una soluzione chiara, dato che aggiungere semplicemente alle "dipendenze" è un po 'goffo!
Scatto del

0

Installare il filo e poi correre

filato globale aggiungere install-peerdeps


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.