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?

Sean Mackesey
la source

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 [email protected]

  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 [email protected].

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

dule
la source
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é.

geon
la source
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!

zatamine
la source
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.

Stephen
la source
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

Vinay Vemula
la source
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 [email protected], installez cette dépendance avec npm install --save [email protected]jusqu'à ce que vous n'en ayez plus UNMET DEPENDENCIES.

Bonne chance.

Akash
la source
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

achasinh
la source
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.

user1585939
la source
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.

John Doe
la source
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'

arielhad
la source
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.

wuliwong
la source
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).

Uberbrady
la source
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>

korp
la source
1

Dans mon cas, la mise à jour de npm l'a résolu.

sudo npm install -g npm
Marcelo Gumiero
la source
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.

Marius
la source
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';.
Aman Agnihotri
la source