Perché npm install dice che ho delle dipendenze non soddisfatte?

Ho un pacchetto node. Quando eseguo npm install dalla root del pacchetto, installa un sacco di cose, ma poi stampa diversi messaggi di errore che assomigliano a questo:

npm WARN unmet dependency /Users/seanmackesey/google_drive/code/explore/generator/node_modules/findup-sync/node_modules/glob richiede graceful-fs@'~1.2.0' ma verrà caricato

Devo essere confuso su cosa fa esattamente npm install. Se rileva una dipendenza, non dovrebbe installarla? In quali condizioni mi dà messaggi di errore come questo, e come posso risolvere le dipendenze?

Soluzione

Credo che sia perché la risoluzione delle dipendenze è un po' rotta, vedi https://github.com/npm/npm/issues/1341#issuecomment-20634338

Di seguito la possibile soluzione:

  1. Installare manualmente i moduli di primo livello che contengono dipendenze non soddisfatte: npm install findup-sync@0.1.2.

  2. Ristrutturate il vostro package.json. Metti tutti i moduli di alto livello (serve come dipendenza per altri moduli) in basso.

  3. Esegui nuovamente il comando npm install.

Il problema potrebbe essere causato dal fallimento di npm di scaricare tutti i pacchetti a causa del timed-out o qualcos'altro.

Nota: Puoi anche installare i pacchetti falliti manualmente usando npm install findup-sync@0.1.2.

Prima di eseguire npm install, eseguire i seguenti passi può aiutare:

  • rimuovere node_modules usando rm -rf node_modules/
  • esegui npm cache clean.

Perché 'rimozione di node_modules' a volte è necessaria? Quando un modulo annidato non riesce ad installarsi durante npm install, la successiva npm install non rileverà le dipendenze annidate mancanti.

Se questo è il caso, a volte è sufficiente rimuovere la dipendenza di primo livello di quei moduli annidati mancanti, ed eseguire nuovamente npm install. Vedere

Commentari (12)

Mi è successo quando il WIFI è andato giù durante un'installazione di npm. Rimuovendo node_modules ed eseguendo nuovamente npm install ho risolto il problema.

Commentari (7)

Le risposte di cui sopra non mi hanno aiutato completamente anche dopo aver eliminato la directory node_modules.

Il comando qui sotto mi ha aiutato alla fine:

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

Si noti che questo tira i moduli del nodo su una connessione HTTP insicura.

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

Commentari (3)