Perché npm install dice che ho dipendenze non soddisfatte?


404

Ho un pacchetto di nodi. Quando corro npm installdal pacchetto root, installa un sacco di cose, ma poi stampa diversi messaggi di errore che assomigliano a questo:

npm WARN dipendenza insoddisfatta / 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 npm installfa esattamente . Se rileva una dipendenza, non dovrebbe installarlo? In quali condizioni mi dà messaggi di errore come questo e come posso risolvere le dipendenze?

Risposte:


397

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

Di seguito sono le possibili soluzioni:

  1. È necessario installare manualmente i moduli di livello superiore, contenenti dipendenze non soddisfatte: npm install findup-sync@0.1.2

  2. Ristruttura il tuo pacchetto.json. Posiziona tutti i moduli di alto livello (funge da dipendenza per altri moduli) in basso.

  3. Rieseguire il npm installcomando.

Il problema potrebbe essere causato dall'incapacità di npm di scaricare tutto il pacchetto a causa del timeout o di qualcos'altro.

Nota: è anche possibile installare manualmente i pacchetti non riusciti utilizzando npm install findup-sync@0.1.2.

Prima di eseguire npm install, può essere utile eseguire le seguenti operazioni:

  • rimuovere node_modules usando rm -rf node_modules/
  • correre npm cache clean

Perché a volte è necessario rimuovere 'node_modules'? Quando un modulo nidificato non riesce a installarsi durante npm install, successivo npm installnon rileverà quelle dipendenze nidificate mancanti.

In tal caso, a volte è sufficiente rimuovere la dipendenza di livello superiore di quei moduli nidificati mancanti e rieseguire npm install. Vedere


22
La rimozione dei moduli del nodo e la pulizia della cache hanno funzionato per me.
MarkoHiel,

4
rimuovere "node_modules", eseguire "npm cache clean" e quindi eseguire "npm install" ha risolto il mio problema. Ho dovuto eseguire 'npm_install' tre volte, finché non ho caricato tutte le dipendenze senza errori.
Hendrix,

2
se npm cache cleannon funziona per motivi di accesso, provare sudo npm cache clean.
Soroush,

12
@Soroush ciecamente aggiungendo sudo a cose che non funzionano correttamente non le risolve magicamente, significa solo che non sai cosa sta succedendo.
Edgar Aroutiounian,

5
perché mai un'altra "soluzione" per npm include rm r node_modules? e perché questa è davvero l'unica opzione nella maggior parte dei casi? non è proprio come immagino che dovrebbe funzionare un gestore di pacchetti
phil294,

83

Mi è successo quando il WIFI è andato giù durante un npm install. Rimozione node_modulese riesecuzione npm installrisolto.


26
e prova npm cache clean.
Ijse

5
Reinstallare il nodo probabilmente non è necessario, ma tra farlo npm cache cleane rimuovere node_modules, questo consiglio ha funzionato per me.
RichLitt,

@RichLitt, Sì, npm cache cleannon è stato abbastanza per me, ho dovuto rimuovere anche il modulo node_modulesper farlo funzionare dopo il fallimento della rete durante l '"installazione".
Mark Tomlin,

Sono confuso su quale node_modulesdirectory rimuovere? Ho un problema simile con l'errore/usr/local/lib/node_modules/npm/node_modules/read-installed/node_modules/readdir-scoped-modules requires graceful-fs@'^4.1.2'
wuliwong,

1
@wuliwong Quello di livello superiore.
Geon,

33

Ho risolto il problema utilizzando queste righe di comando

  • $ rm -rf node_modules/
  • $ sudo npm update -g npm
  • $ npm install

E 'fatto!


5
Dopo aver eseguito sudo npm update -g npm, il mio npm è stato reso inutile, qualsiasi tentativo di installare qualcosa risulta in "npm ERR! Impossibile trovare il modulo 'read-package-json'" e devo votare in basso
MichaelB,

Ha funzionato per me e per altre persone, forse hai un altro problema. Prova a installare il modulo read-package-json a livello globale sudo npm install -g read-package-jsonO reinstalla il tuo npm
zatamine il

8
avvertenza: non dovresti usare sudo con npm, si consiglia invece di cambiare i permessi o la proprietà della directory che npm vuole scrivere anche.
Sgnl,

1
potrebbe voler aggiungere anche "npm cache clean"
Alexander Mills,

1
Non utilizzare sudocon npm
Concedi il

11

L'aggiornamento di NPM all'ultima versione può essere di grande aiuto in questo. La risposta di dule sopra è giusta per dire che la gestione delle dipendenze è un po 'rotta, ma sembra che questo sia principalmente per le versioni precedenti di npm.

Il comando npm listti dà un elenco di tutti gli installati node_modules. Quando ho eseguito l'aggiornamento dalla versione 1.4.2 alla versione 2.7.4, molti moduli precedentemente contrassegnati WARN unmet dependencynon venivano più indicati come tali.

Per aggiornare npm, è necessario digitare npm install -g npmsu MacOSX o Linux. Su Windows, ho scoperto che scaricare e rieseguire il programma di installazione di nodejs era un modo più efficace per aggiornare npm.


Ho avuto lo stesso problema con la versione npm distribuita nei repository CentOS 7. Ho installato l'ultima versione di npm da node.js e il problema è scomparso, quindi penso che tu abbia ragione, può essere un problema con una versione precedente.
Elouan Keryell-Even

9

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

Sotto il comando mi ha aiutato finalmente:

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

Si noti che ciò tira i moduli del nodo su una connessione HTTP non sicura.

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


Questo mi ha aiutato così come il mio host stava reindirizzando il traffico.
dimiguel,

1
@dimgl bello da sapere :)
Vinay Vemula il

1
@Dejel hai provato anche le altre risposte. Potrebbe essere necessario eseguire npm installpiù volte e / o installare manualmente alcuni pacchetti di nodi uno per uno.
Vinay Vemula,

4

Per ogni -- UNMET PEER DEPENDENCY, per es. -- UNMET PEER DEPENDENCY rxjs@5.0.0-rc.2, installa quella dipendenza con npm install --save rxjs@5.0.0-rc.2fino a quando non ne hai più UNMET DEPENDENCIES.

In bocca al lupo.


1
Mi lascia con gli stessi errori, incluso uno nuovo:ERR! code 1
Wouter Vanherck

1
@WouterVanherck puoi provare rm -rf node_modules, quindi npm cache cleane npm install. Se ancora non funziona, ti suggerisco di nuovo rm -rf node_modules, quindi npm i -g yarne poi yarn install. Il filato è abbastanza buono da gestire node_modules. In bocca al lupo.
Akash,

1
Sì, è quello che peerDependenciesserve. Per spingerti a una scelta consapevole della versione.
Kamafeather,

3

npm listEseguo e ho installato tutti i pacchetti elencati come UNMET DEPENDENCY

Per esempio:

├── UNMET DEPENDENCY css-loader@^0.23.1
npm install css-loader@^0.23.1


2

Questo mi ha risolto:

  1. Correggere i numeri di versione in package.json, in base agli errori;
  2. Rimuovi node_modules( rm -rf node_modules);
  3. Rieseguire npm install.

Ripetere questi passaggi fino a quando non ci sono più errori.


1

Qualcosa del genere, aggiungerei un altro passo.

Notare che nella versione npm> 1.4.9, 'npm install' installa devDependencies. Prima prova a rimuovere i moduli e la cache esistenti:

remove node_modules $ rm -rf node_modules/
run $ npm cache clean

Quindi prova:

npm install --dev
npm update --dev

Questo almeno risolverà la risoluzione di dipendenza ricorsiva.


6
a cosa serve la bandiera --dev?
Alexander Mills,

1

--dev installa devDependencies in modo ricorsivo (e funziona per sempre ..) come può aiutare a risolvere le differenze di versione?

Puoi provare a rimuovere la cartella node_moduls, quindi pulire la cache npm ed eseguire nuovamente 'npm i'


1

Ho avuto un problema simile durante l'installazione della CLI React Native. Non ero sicuro di quale /node_modulesdirectory avrei dovuto rimuovere dopo aver letto le risposte qui. Alla fine ho appena corso

npm update -g

ed è stato in grado di installare il pacchetto successivamente.


1

Stavo cercando di lavorare su un sistema di distribuzione automatizzato in esecuzione npm install, quindi molte di queste soluzioni non avrebbero funzionato per me in un fasion automatizzato. Non ero in grado di cancellare / ricreare, node_modules/né potevo cambiare facilmente le versioni di Node.js.

Così ho finito per correre npm shrinkwrap- aggiungendo il npm-shrinkwrap.jsonfile al mio pacchetto di distribuzione e eseguendo installazioni da lì. Ciò ha risolto il problema per me; con il file shrinkwrap come 'helper', npm sembrava essere in grado di trovare i pacchetti giusti e installarli per me. (Shrinkwrap ha anche altre funzionalità, ma questo era ciò di cui avevo bisogno in questo caso particolare).


1

Ho riscontrato questo problema durante l'installazione dei pacchetti di reazione e questo ha funzionato per me: npm install --save <package causing this error>


1

Nel mio caso, l'aggiornamento di npm ha risolto il problema.

sudo npm install -g npm

1

npm installinstallerà tutti i pacchetti da npm-shrinkwrap.json, ma potrebbe ignorare i pacchetti package.json, se non sono preimpostati nel primo.

Se il tuo progetto ha un npm-shrinkwrap.json, assicurati di eseguire npm shrinkwrapper rigenerarlo, ogni volta che aggiungi aggiungi / rimuovi / modifica package.json.



0

Aggiornamento a 4.0.0

L'aggiornamento a 4 è semplice come l'aggiornamento delle dipendenze angolari all'ultima versione e ricontrollare se si desidera animazioni. Questo funzionerà per la maggior parte dei casi d'uso.

Su Linux / Mac:

npm install @angular/{common,compiler,compiler-cli,core,forms,http,platform-browser,platform-browser-dynamic,platform-server,router,animations}@latest typescript@latest --save 

Su Windows:

npm install @angular/common@latest @angular/compiler@latest @angular/compiler-cli@latest @angular/core@latest @angular/forms@latest @angular/http@latest @angular/platform-browser@latest @angular/platform-browser-dynamic@latest @angular/platform-server@latest @angular/router@latest @angular/animations@latest typescript@latest --save

Quindi esegui qualsiasi comando ng serve o npm start che usi normalmente e tutto dovrebbe funzionare.

Se fai affidamento su Animazioni, importa il nuovo BrowserAnimationsModuledalla @angular/platform-browser/animationstua radice NgModule. Senza questo, il codice verrà compilato ed eseguito, ma le animazioni genereranno un errore. Le importazioni da @angular/coresono state deprecate, utilizzare le importazioni dal nuovo pacchetto

import { trigger, state, style, transition, animate } from '@angular/animations';.
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.