Comment puis-je corriger l'avertissement npm UNMET PEER DEPENDENCY?

223

Je suis sur Windows 10, avec Node 5.6.0 et npm 3.6.0. J'essaie d'installer angular-material et mdi dans mon dossier de travail. npm installe les erreurs mdi de matériau angulaire avec:

+-- angular@1.5.0

+-- UNMET PEER DEPENDENCY angular-animate@^1.5.0

+-- UNMET PEER DEPENDENCY angular-aria@^1.5.0

+-- angular-material@1.0.6

+-- UNMET PEER DEPENDENCY angular-messages@^1.5.0 `-- mdi@1.4.57

npm WARN enoent ENOENT: no such file or directory, open
'C:\Users\xxxxx\Desktop\ngClassifieds\package.json' 

npm WARN angular-material@1.0.6 requires a peer of
angular-animate@^1.5.0 but none was installed. 

npm WARN angular-material@1.0.6 requires a peer of angular-aria@^1.5.0
but none was installed. 

npm WARN angular-material@1.0.6 requires a peer of
angular-messages@^1.5.0 but none was installed.

Comment résoudre ce problème pour installer AngularJS Material et MDI?

Reza
la source
Ce type d'erreur crée-t-il un problème?
blackHawk
Pas pour Reza, il est donc trop tard, mais pour tous les autres ... Essayez ceci: npm afficher les dépendances des matériaux angulaires
peter70
1
En général, vous ne souhaiterez pas toujours résoudre une dépendance non satisfaite. Par exemple, certains paquets ont une dépendance sur other-package@^1.5.0 et vous avez installé [email protected], vous n'aurez peut-être pas besoin de restaurer la version. Il serait préférable de tester si vous rencontrez réellement des problèmes avec la nouvelle version.
John Pankowicz

Réponses:

203

npm n'installe plus les dépendances entre pairs, vous devez donc les installer manuellement, faites simplement une npm installsur les dep nécessaires, puis essayez de réinstaller la principale.


Répondre au commentaire:

c'est juste dans ce message, il dit quel deps vous manque

UNMET PEER DEPENDENCY angular-animate@^1.5.0 +-- 
UNMET PEER DEPENDENCY angular-aria@^1.5.0 +-- angular-material@1.0.6 +
UNMET PEER DEPENDENCY angular-messages@^1.5.0 `-- mdi@1.4.57` 

Vous devez donc npm install angular angular-animate angular-aria angular-material angular-messages mdi

Datsik
la source
existe-t-il un moyen de trouver les dépôts pour le matériau angulaire afin que je puisse installer?
Reza
2
Devez-vous ajouter ces nouvelles dépendances à votre package.json?
0xcaff
2
@caffinatedmonkey qui serait idéal
Datsik
9
@caffinatedmonkey si vous spécifiez le --savecommutateur npm mettra à jour votre package.json pour vous (ou --save-devsi le package est une dépendance de développement)
McGuireV10
33
NPM n'a-t-il pas tout l'intérêt de gérer toutes ces dépendances pour vous? si je fais une installation npm, puis obtenir une liste d'un ensemble de dépendances non satisfaites que je dois ajouter manuellement à mon fichier composer.json à la main, quelle valeur est-ce que j'obtiens même de npm à ce stade?
chiliNUT
66

UNMET PEER DEPENDENCYerreur est levée lorsque les dépendances d'un ou plusieurs modules spécifiés dans le package.jsonfichier ne sont pas respectées. Vérifiez attentivement les avertissements et mettez à jour le package.jsonfichier avec les versions correctes des dépendances.

Ensuite, exécutez

rm -rf node_modules/
npm cache clean
npm install

Cela installera correctement toutes les dépendances requises.

JayKrish
la source
3
qu'est-ce que la dépendance des pairs
aWebDeveloper
Lorsque vous installez un package, il peut à son tour dépendre de versions spécifiques d'autres packages. Si vous ne fournissez pas une version dépendante correcte du package, la «dépendance Peer» n'est pas satisfaite. Vous devez donc mettre à jour la version attendue des packages dépendants pour résoudre ce problème.
JayKrish
4
Ça n'a pas marché pour moi. J'ai toujours reçu un avertissement concernant la nécessité d'un pair.
Adam Zerner
1
Beaucoup plus propre que la solution acceptée! Cet ensemble de code gère tous les cas possibles du problème de l'op, au lieu du problème spécifique qu'ils ont.
HoldOffHunger
l'utilisation de la commande npm cache clean donne l'erreur: À partir de npm @ 5, le cache npm se corrige automatiquement des problèmes de corruption et les données extraites du cache sont garanties d'être valides. Si vous voulez vous assurer que tout est cohérent, utilisez plutôt 'npm cache verify'. npm ERR! Si vous êtes sûr de vouloir supprimer l'intégralité du cache, réexécutez cette commande avec --force.
CodeMonkey
30

Dans mon cas, toutes les dépendances étaient déjà là. Veuillez mettre à jour NPM dans ce cas car il pourrait avoir été bloqué. Cela a résolu mon problème.

npm install -g npm
Anuj Sharma
la source
A travaillé pour moi. Je recevais l'erreur UNMET PEER DEPENDENCY typescriptlors de la tentative d'installation tslint. une fois la mise à jour du npm effectuée, il fallait d'abord installer typscript puis installer tslint.
Ravimallya
Pour une raison quelconque, j'ai dû l'exécuter plusieurs fois jusqu'à ce que toutes ses dépendances soient mises à jour.
Coderer
Cela a cassé npm pour moi et a entraîné un tas d'erreurs.
Jack
14

npm-install-peers a fonctionné pour moi.

npm install -g npm-install-peers
alexoviedo999
la source
1
N'a pas fonctionné pour moi: "Ce paquet ne semble pas avoir de dépendances entre pairs". Cependant, j'ai plusieurs messages comme "npm ERR! Peer dep manquant: @ angular / common @ ^ 5.0.0 || ^ 6.0.0, requis par @ agm / core @ 1.0.0-beta.3"
Almir Campos
2
Ce package n'installe que les dépôts de pairs directs du package actuel et ne meurt pas pour gérer les dépôts de pairs des dépôts du package (pairs d'enfants).
Alex Skrypnyk
7

L'une des causes les plus possibles de cette erreur pourrait être que vous avez défini une version plus ancienne dans votre package.json. Pour résoudre ce problème, modifiez les versions dans le package.json pour correspondre à celles dont se plaint npm.

Une fois terminé, exécutez npm install et le tour est joué !!.

Thomas Mwania
la source
6

Cette réponse ne s'applique pas à tous les cas, mais si vous ne pouvez pas résoudre l'erreur en tapant simplement npm install , cette étape peut vous aider.

Disons que vous avez cette erreur.

UNMET PEER DEPENDENCY packageA@4.2.0

npm WARN packageB@3.3.0 requires a peer of packageA@^3.1.0 but none was installed.

Cela signifie que vous avez installé la version 4.2.0 de packageA, mais [email protected] a besoin de la version 3.xx de pakageA. ( explication de ^ )

Vous pouvez donc résoudre cette erreur en rétrogradant packageA vers 3.xx, mais vous ne souhaitez généralement pas rétrograder le package.
La bonne nouvelle est que, dans certains cas, packageB ne suit tout simplement pas packageA et que le mainteneur de packageB s'efforce de faire passer la dépendance des pairs de packageA à 4.xx
Dans ce cas, vous pouvez vérifier s'il existe une version supérieure de packageB qui nécessite la version 4.2.0 de packageA dans le npm ou le github.

Par exemple, allez à la page de publicationentrez la description de l'image ici

Souvent, vous pouvez trouver des changements de rupture sur la dépendance comme celui-ci.

packageB v4.0.0-beta.0

BREAKING CHANGE
package: requires packageA >= v4.0.0

Si vous ne trouvez rien sur la page de publication, accédez à la page de publication et recherchez le problème par mot-clé comme peer. Vous pouvez trouver des informations utiles.

entrez la description de l'image ici

À ce stade, vous avez deux options.

1) Mettre à niveau vers la version souhaitée
2) Laisser une erreur pour le moment, attendre la sortie de la version stable.

Si vous choisissez l'option 1:
Dans de nombreux cas, la version n'a pas de latest tag donc pas stable. Vous devez donc vérifier ce qui a changé dans cette mise à jour et vous assurer que rien ne se cassera.

Si vous choisissez l'option 2:
si la mise à niveau de pakageA de la version 3 à 4 est triviale, ou si le responsable de pakageB n'a pas encore testé la version 4 de pakageA mais dit que cela ne devrait pas poser de problème, vous pouvez envisager de laisser l'erreur.

Dans les deux cas, il est préférable de tester soigneusement s'il ne casse rien.

Enfin, si vous voulez savoir pourquoi vous devez faire manuellement une telle chose, ce lien explique bien.

ohkts11
la source
3

Ok donc j'ai eu du mal pendant longtemps à essayer de comprendre cela. Voici l' option nucléaire , pour quand vous avez épuisé toutes les autres voies.

  • Créez un nouveau dossier sur votre PC.
  • Téléchargez une toute nouvelle installation d'angular - j'ai utilisé ce guide: https://coursetro.com/posts/code/55/How-to-Install-an-Angular-4-App
  • Exécutez-le, assurez-vous que cela fonctionne
  • Installez ensuite vos dépendances une par une à partir de votre fichier package.json
  • Exécutez-le après l'installation de chacun

Lorsque vous avez terminé et que cela fonctionne toujours, importez votre code réel dans ce nouveau projet. Correction des erreurs de compilation de la nouvelle version des causes angulaires.

C'est ce qui a fait pour moi .. 1 heure de retravail vs 6 heures d'essayer de comprendre que wtf était mauvais .. j'aurais aimé le faire de cette façon pour commencer ..

user230910
la source
OP utilise AngularJS
Edric
3

La réponse donnée ne fonctionnera pas toujours. Si cela ne résout pas votre problème. Assurez-vous que vous utilisez également le bon symbole dans votre package.json. C'est très important pour résoudre ce mal de tête. Par exemple:

warning " > @angular/[email protected]" has incorrect peer dependency "typescript@>=2.4.2 <2.7".
warning " > [email protected]" has incorrect peer dependency "typescript@>=2.4.2 <2.6".

Donc, mon dactylographié doit être compris entre 2.4.2 et 2.6, n'est-ce pas?

J'ai donc changé ma bibliothèque de dactylographie de l'aide "typescript": "^2.7"à l'utilisation "typescript": "^2.5". Semble correct?

Faux.

Les ^moyens que vous êtes d' accord avec NPM en utilisant "typescript": "2.5"ou "2.6"ou "2.7"etc ...

Si vous voulez savoir ce ^que ~cela signifie, voyez: Quelle est la différence entre tilde (~) et caret (^) dans package.json?

Vous devez également vous assurer que le package existe. Peut-être n'y a-t-il pas de "typescript": "2.5.9"recherche des numéros de colis. Pour être vraiment sûr, supprimez simplement le ~ou le ^si vous ne voulez pas lire ce qu'ils signifient.

Samuel Thompson
la source
Merci pour cette explication. Que se passe-t-il si j'utilise deux bibliothèques où la première (par exemple library-one) utilise par exemple un pair de package@<2.6et l'autre ( library-two) un pair de package@>2.7? Puis-je finir par devoir gérer deux versions de packagedans ma base de code? Comment saurai-je que lorsque je l'utilise, library-oneje dois l'utiliser avec [email protected]pendant que lorsque j'utilise, library-twoje dois l'utiliser avec [email protected]?
tonix
2

Disponible aujourd'hui Angular 2 rc.7 , et j'ai eu un problème similaire avec [email protected]UNMET PEER DEPENDENCY.

Si vous, comme moi, tout simplement remplacé @angular/...rc.6à @angular/...rc.7- il ne suffit pas. Parce que, par exemple, @angular/routern'a pas de rc.6version.

Dans ce cas, mieux examiner package.json dans Démarrage rapide

ktretyak
la source
OP utilise AngularJS
Edric
-6

vous pouvez résoudre en installant les dépendances UNMET globalement.

exemple: npm install -g @ angular / common @ 4.4.6

installez chacun un par un. ça a marché pour moi.

Srinivas Jatoth
la source
Est-ce vraiment la meilleure solution, pensait-on? Installer globalement pour ignorer le "problème" réel des dépendances du projet?
qx3
1
Cela installera les dépendances globalement sur votre machine. Vos pairs ne pourront pas en tenir compte dans un environnement partagé.
AC Patrice du