Pourquoi npm install dit-il que j'ai des dépendances non satisfaites?


404

J'ai un package de nœuds. Lorsque je lance à npm installpartir de la racine du package, il installe un tas de choses, mais affiche ensuite plusieurs messages d'erreur qui ressemblent à ceci:

npm WARN dépendance non satisfaite / Users / seanmackesey / google_drive / code / explore / generator / node_modules / findup-sync / node_modules / glob nécessite graceful-fs@'~1.2.0 'mais se chargera

Je dois être confus sur ce que npm installfait exactement . S'il détecte une dépendance, ne devrait-il pas l'installer? Dans quelles conditions cela me donne-t-il des messages d'erreur comme celui-ci et comment puis-je résoudre les dépendances?

Réponses:


397

Je pense que c'est parce que la résolution des dépendances est un peu cassée, voir https://github.com/npm/npm/issues/1341#issuecomment-20634338

Voici la solution possible:

  1. Vous devez installer manuellement les modules de niveau supérieur, contenant des dépendances non satisfaites: npm install findup-sync@0.1.2

  2. Re-structurez votre package.json. Placez tous les modules de haut niveau (sert de dépendance pour les autres modules) en bas.

  3. Réexécutez la npm installcommande.

Le problème pourrait être dû à l'échec de npm à télécharger tout le package en raison d'un délai d'expiration ou d'autre chose.

Remarque: Vous pouvez également installer manuellement les packages ayant échoué à l'aide de npm install findup-sync@0.1.2.

Avant d'exécuter npm install, les étapes suivantes peuvent être utiles:

  • supprimer node_modules en utilisant rm -rf node_modules/
  • courir npm cache clean

Pourquoi «supprimer node_modules» est parfois nécessaire? Lorsqu'un module imbriqué ne s'installe pas pendant npm install, les suivants npm installne détectent pas ces dépendances imbriquées manquantes.

Si tel est le cas, il suffit parfois de supprimer la dépendance de niveau supérieur de ces modules imbriqués manquants et de npm installrecommencer. Voir


22
La suppression des modules de nœuds et le nettoyage du cache l'ont fait fonctionner pour moi.
MarkoHiel

4
la suppression de 'node_modules', l'exécution de 'npm cache clean', puis l'exécution de 'npm install' ont résolu mon problème. J'ai dû exécuter 'npm_install' trois fois, jusqu'à ce que toutes les dépendances soient chargées sans erreur.
hendrix

2
si npm cache cleancela ne fonctionne pas pour des raisons d'accès, essayez sudo npm cache clean.
Soroush

12
@Soroush aveuglément simplement ajouter sudo à des choses qui ne fonctionnent pas correctement ne les corrige pas comme par magie, signifie simplement que vous ne savez pas ce qui se passe.
Edgar Aroutiounian

5
pourquoi une autre "solution" pour npm inclut-elle rm r node_modules? et pourquoi est-ce vraiment la seule option dans la plupart des cas? ce n'est pas tout à fait comme ça que je pense qu'un gestionnaire de paquets devrait fonctionner comme
phil294

83

Cela m'est arrivé lorsque le WIFI est tombé en panne pendant un npm install. La suppression node_moduleset la réexécution l'ont npm installcorrigé.


26
et essayez npm cache clean.
ijse

5
La réinstallation du nœud n'est probablement pas nécessaire, mais entre le faire npm cache cleanet le supprimer node_modules, ce conseil a fonctionné pour moi.
RichLitt

@RichLitt, Ouais, faire npm cache cleanne me suffisait pas, j'ai dû aussi supprimer le node_modulespour le faire fonctionner après l'échec du réseau lors de l '"installation".
Mark Tomlin

Je ne sais pas quel node_modulesrépertoire supprimer? J'ai un problème similaire avec l'erreur/usr/local/lib/node_modules/npm/node_modules/read-installed/node_modules/readdir-scoped-modules requires graceful-fs@'^4.1.2'
wuliwong

1
@wuliwong Le premier niveau.
geon

33

J'ai résolu le problème en utilisant ces lignes de commande

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

C'est fait!


5
Après avoir exécuté MNP mise à jour sudo NPM, mon NPM a été rendu inutile, toute tentative d'installer quoi que ce soit des résultats dans « ! ERR NPM Vous ne trouvez pas le module « lecture paquet JSON » » im va devoir descendre voter ce
michaelb

Cela a fonctionné pour moi et pour d'autres personnes, peut-être que vous avez un autre problème. Essayez d'installer le module read-package-json globalement sudo npm install -g read-package-jsonou réinstallez votre npm
zatamine

8
mise en garde: vous ne devriez pas utiliser sudo avec npm, il est suggéré de changer les autorisations ou la propriété du répertoire que npm veut également écrire.
Sgnl

1
pourrait aussi vouloir ajouter "npm cache clean"
Alexander Mills

1
Ne pas utiliser sudoavec npm
Grant

11

La mise à niveau de NPM vers la dernière version peut grandement vous aider. La réponse de dule ci-dessus a raison de dire que la gestion des dépendances est un peu cassée, mais il semble que ce soit principalement pour les anciennes versions de npm.

La commande npm listvous donne une liste de tous les installés node_modules. Lors de la mise à niveau de la version 1.4.2 vers la version 2.7.4, de nombreux modules précédemment marqués WARN unmet dependencyn'étaient plus notés comme tels.

Pour mettre à jour npm, vous devez taper npm install -g npmsur MacOSX ou Linux. Sous Windows, j'ai constaté que le re-téléchargement et la réexécution du programme d'installation de nodejs étaient un moyen plus efficace de mettre à jour npm.


J'ai eu le même problème avec la version npm distribuée dans les dépôts CentOS 7. J'ai installé la dernière version npm de node.js, et le problème a disparu, donc je pense que vous avez raison, cela peut être un problème avec une ancienne version.
Elouan Keryell-Even

9

Les réponses ci-dessus ne m'ont pas aidé complètement même après la suppression du node_modulesrépertoire.

La commande ci-dessous m'a finalement aidé:

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

Notez que cela tire les modules de nœuds sur une connexion HTTP non sécurisée.

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


Cela m'a aidé ainsi que mon hôte redirigeait le trafic.
dimiguel

1
@dimgl agréable à savoir :)
Vinay Vemula

1
@Dejel avez-vous également essayé les autres réponses. Vous devrez peut-être exécuter npm installplusieurs fois et / ou installer manuellement certains packages de nœuds un par un.
Vinay Vemula

4

Pour tous -- UNMET PEER DEPENDENCY, par ex. -- UNMET PEER DEPENDENCY rxjs@5.0.0-rc.2, installez cette dépendance avec npm install --save rxjs@5.0.0-rc.2jusqu'à ce que vous n'en ayez plus UNMET DEPENDENCIES.

Bonne chance.


1
Me laisse avec les mêmes erreurs dont une nouvelle:ERR! code 1
Wouter Vanherck

1
@WouterVanherck pouvez-vous s'il vous plaît essayer rm -rf node_modules, puis npm cache cleanet npm install. Si cela ne fonctionne toujours pas, je vous suggère de recommencer rm -rf node_modules, puis de npm i -g yarntemps en temps yarn install. Le fil est assez bon à gérer node_modules. Bonne chance.
Akash

1
Oui, c'est pour ça peerDependencies. Pour vous pousser à un choix conscient de la version.
Kamafeather

3

J'exécute npm listet installe tous les packages répertoriés comme DEPENDENCY UNMET

Par exemple:

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


2

Cela m'a résolu:

  1. Corrigez les numéros de version en package.jsonfonction des erreurs;
  2. Remove node_modules( rm -rf node_modules);
  3. Relancez npm install.

Répétez ces étapes jusqu'à ce qu'il n'y ait plus d'erreurs.


1

Quelque chose dans la même veine, j'ajouterais une autre étape.

Notez que sur la version npm> 1.4.9, «npm install» installe devDependencies. Essayez d'abord de supprimer les modules et le cache existants:

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

Alors essaye:

npm install --dev
npm update --dev

Cela résoudra au moins la résolution de dépendance récursive.


6
à quoi sert le drapeau --dev?
Alexander Mills

1

--dev installant devDependencies de manière récursive (et son exécution pour toujours ..) comment cela peut aider à résoudre les différences de version?

Vous pouvez essayer de supprimer le dossier node_moduls, puis nettoyer le cache npm puis exécuter à nouveau 'npm i'


1

J'ai rencontré un problème similaire lors de l'installation de React Native CLI. Je ne savais pas quel /node_modulesrépertoire j'étais censé supprimer après avoir lu les réponses ici. J'ai fini par courir

npm update -g

et a pu installer le package par la suite.


1

J'essayais de travailler sur un système de déploiement automatisé qui fonctionne npm install, donc beaucoup de ces solutions ne fonctionneraient pas pour moi dans un mode automatisé. Je n'étais pas en mesure d'aller supprimer / recréer node_modules/ni changer facilement les versions de Node.js.

J'ai donc fini par exécuter npm shrinkwrap- en ajoutant le npm-shrinkwrap.jsonfichier à mon ensemble de déploiement et en exécutant les installations à partir de là. Cela a réglé le problème pour moi; avec le fichier shrinkwrap comme «aide», npm semblait être en mesure de trouver les bons packages et de les installer pour moi. (Shrinkwrap a également d'autres fonctionnalités, mais c'était ce dont j'avais besoin dans ce cas particulier).


1

J'ai rencontré ce problème lors de l'installation des packages React et cela a fonctionné pour moi: npm install --save <package causing this error>



1

npm installva installer tous les packages de npm-shrinkwrap.json, mais peut ignorer les packages dans package.json, s'ils ne sont pas prédéfinis dans le premier.

Si votre projet en a un npm-shrinkwrap.json, assurez-vous de l'exécuter npm shrinkwrappour le régénérer, chaque fois que vous ajoutez ajouter / supprimer / modifier package.json.



0

Mise à jour vers 4.0.0

La mise à jour vers 4 est aussi simple que la mise à jour de vos dépendances angulaires vers la dernière version, et une double vérification si vous voulez des animations. Cela fonctionnera pour la plupart des cas d'utilisation.

Sous 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 

Sous 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

Ensuite, exécutez la commande ng serve ou npm start que vous utilisez normalement, et tout devrait fonctionner.

Si vous comptez sur les animations, importez le nouveau BrowserAnimationsModule depuis @angular/platform-browser/animationsvotre racine NgModule. Sans cela, votre code sera compilé et exécuté, mais les animations déclencheront une erreur. Les importations en provenance de @angular/coreétaient obsolètes, utilisez les importations du nouveau package

import { trigger, state, style, transition, animate } from '@angular/animations';.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.