Comment installer automatiquement les dépendances homologues npm?

274

Par exemple, lorsque j'installe Angular2:

npm install --save angular2
temp@1.0.0 /Users/doug/Projects/dougludlow/temp
├── angular2@2.0.0-beta.3 
├── UNMET PEER DEPENDENCY es6-promise@^3.0.2
├── UNMET PEER DEPENDENCY es6-shim@^0.33.3
├── UNMET PEER DEPENDENCY reflect-metadata@0.1.2
├── UNMET PEER DEPENDENCY rxjs@5.0.0-beta.0
└── UNMET PEER DEPENDENCY zone.js@0.5.11

npm WARN angular2@2.0.0-beta.3 requires a peer of es6-promise@^3.0.2 but none was installed.
npm WARN angular2@2.0.0-beta.3 requires a peer of es6-shim@^0.33.3 but none was installed.
npm WARN angular2@2.0.0-beta.3 requires a peer of reflect-metadata@0.1.2 but none was installed.
npm WARN angular2@2.0.0-beta.3 requires a peer of rxjs@5.0.0-beta.0 but none was installed.
npm WARN angular2@2.0.0-beta.3 requires a peer of zone.js@0.5.11 but none was installed.

Existe-t-il un indicateur magique que je peux transmettre à npm qui installera également les dépendances entre pairs? Je n'ai pas pu en trouver un ... C'est fastidieux de copier et coller manuellement les dépendances des pairs et de m'assurer d'avoir les bonnes versions.

En d'autres termes, je préfère ne pas avoir à faire:

npm install --save angular2@2.0.0-beta.3 es6-promise@^3.0.2 es6-shim@^0.33.3 reflect-metadata@0.1.2 rxjs@5.0.0-beta.0 zone.js@0.5.11

Quelle est la meilleure façon?

Douglas Ludlow
la source
Avez-vous déjà résolu ce problème? J'ai le même problème lors de l'installation d'angular2. Même après avoir installé manuellement es6-promise avec l'indicateur -g et réessayé l'installation de npm -g angular2, j'obtiens la même erreur / avertissement de 5 dépendances de pairs non satisfaites es6-promise, es6-shim, reflect-metadata, rxjs et zone.js
nttakr
4
@nttakr - oui, l'installation des versions exactes souhaitées en tant que dépendances entre pairs supprime l'avertissement. Vous ne voulez pas les installer globalement (avec le drapeau -g). Vous voulez les installer localement (drapeau -S), mais comme je l'ai dit, ils doivent être les versions exactes (c'est-à-dire: [email protected]nécessite es6-promise@^3.0.2). Cependant, je veux savoir s'il existe une commande / indicateur qui installe automatiquement les dépendances entre pairs.
Douglas Ludlow
@DouglasLudlow quelle version de NPM utilisez-vous?
peteb
@peteb: npm -v=>3.5.3
Douglas Ludlow
J'ai le même problème, et je n'ai pas trouvé de rendement de solution ....
youngwind

Réponses:

178

L'installation automatique des dépendances entre pairs a été explicitement supprimée avec npm 3, car elle pose plus de problèmes qu'elle n'a tenté de résoudre. Vous pouvez lire à ce sujet ici par exemple:

Donc non, pour les raisons données, vous ne pouvez pas les installer automatiquement avec npm 3 vers le haut.

migg
la source
4
Oui, j'ai vu ceci: github.com/npm/npm/issues/6565 ... J'espérais juste que vous pourriez toujours les installer en option avec un drapeau ou quelque chose. Je suppose que je vais devoir ouvrir un problème ou quelque chose.
Douglas Ludlow
157
Comment gérez-vous ce genre de problème? Je ne suis pas un expert npm donc quand je lis "x nécessite un pair de y mais aucun n'a été trouvé", je me demande "quel pair?" et "comment puis-je simplement tout faire fonctionner à nouveau?" Existe-t-il un processus? Creusez-vous dans le code de x et y jusqu'à ce que vous trouviez ce qui manque? Une fois que vous avez découvert ce qui manque, que faites-vous ensuite? Merci!
Dan Cancro
81
Ah, c'est un problème anglais: "x nécessite un pair de y mais aucun n'a été installé" devrait être "x nécessite le pair, y, mais y n'a pas été installé". J'ai compris que "x nécessite l'un des pairs de y mais ce pair n'a pas été installé et nous ne vous disons pas lequel de vos pairs vous avez besoin".
Dan Cancro
1
De plus, si extraneous
j'installe
3
Il y en a "superflus" car vous devez les ajouter à vos dépendances de package.
Dinoboff
37

Je l'ai résolu en réécrivant package.json avec les valeurs exactes que les avertissements concernaient:

npm WARN angular2@2.0.0-beta.3 requires a peer of es6-shim@^0.33.3 but none was installed.

package.json: "es6-shim": "^ 0.33.3",

npm WARN angular2@2.0.0-beta.3 requires a peer of reflect-metadata@0.1.2

package.json: "réfléchir-métadonnées": "0.1.2",

Delete node_modules directory

npm install
MrLehiste
la source
15
Peut-être qu'un npm cache clean, npm installpeut-être mieux que d'essuyer les modules node_modules? Je m'abstiens toujours de supprimer node_modules, j'aime découvrir quel est le problème plutôt que de faire sauter le répertoire.
Bruno
Je ne pense pas que ce soit une idée très sûre pour les gens de simplement le faire fonctionner. Ils ont des changements plus élevés d'aggravation de leurs conflits: avoir du code qui ne correspond pas à sa bibliothèque.
zoomlar
Vous avez le message d'erreur suivant en essayant d'exécuter le cache propre npm: npm ERR! À 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'. D'un autre côté, si vous déboguez un problème avec le programme d'installation, vous pouvez utiliser npm install --cache /tmp/empty-cachepour utiliser un cache temporaire au lieu de nuquer le réel. npm ERR! npm ERR! Si vous êtes sûr de vouloir supprimer l'intégralité du cache, réexécutez cette commande avec --force.
Tarun
22

Code de triche utile dans ce scénario et quelques autres ...

├── DÉPENDANCE DES PAIRS NON RÉPONDU @ angulaire / commun @ 4.0.2

├── UNMET PEER DEPENDENCY @ angular / compiler @ 4.0.2

├── UNMET PEER DEPENDENCY @ angular / compiler-cli @ 4.0.2

├── LA DÉPENDANCE DES PAIRS NON RÉPONDUE @ angulaire / noyau @ 4.0.2

├── LA DÉPENDANCE DES PAIRS NON RÉPUTÉE @ angulaire / formulaires @ 4.0.2

├── LA DÉPENDANCE DES PAIRS UNMET @ angular / http @ 4.0.2

├── UNMET PEER DEPENDENCY @ angular / platform-browser @ 4.0.2

├── UNMET PEER DEPENDENCY @ angular / platform-browser-dynamic @ 4.0.2>

  1. copiez et collez votre erreur dans votre éditeur de code.
  2. Mettez en surbrillance une partie indésirable avec votre curseur. Dans ce cas, «├── LA DÉPENDANCE DES PAIRS NON RÉPONDU»
  3. Appuyez plusieurs fois sur commande + d .
  4. Appuyez deux fois sur Supprimer . (Appuyez sur espace si vous avez accidentellement mis en surbrillance '├── DÉPENDANCE DES PAIRS NON RÉPONDU'.)
  5. Appuyez une fois. Ajouter 'npm install'
  6. Appuyez une fois. Ajouter '--save
  7. Copiez vos trucs dans le cli et exécutez

npm install @ angular / common @ 4.0.2 @ angular / compiler @ 4.0.2 @ angular / compiler-cli @ 4.0.2 @ angular / core @ 4.0.2 @ angular / forms @ 4.0.2 @ angular / http @ 4.0 .2 @ angular / platform-browser @ 4.0.2 @ angular / platform-browser-dynamic @ 4.0.2 --save

zoomlar
la source
8
L'option --saven'est évidemment plus requise à partir de npm 5.0.0: stackoverflow.com/a/19578808/12484
Jon Schneider
12

Le projet npm-install-peersdétectera les pairs et les installera.

À ce jour, v1.0.1il ne prend pas en charge l'écriture package.jsonautomatique, ce qui résoudrait essentiellement notre besoin ici.

Veuillez ajouter votre assistance pour un problème en vol: https://github.com/spatie/npm-install-peers/issues/4

deepelement
la source
36
En courant, il m'a donné ce message. This package doesn't seem to have any peerDependencies
Thabung
2
J'ai le même message.
Thibault Boursier
7
Si je comprends bien, npm-install-peersinstallera peerDependenciesenregistré en package.json. Il n'installera pas peerDependenciesde dépendances telles que angular2.
drizzd
Oui, pour second commentaire @drizzd: npm-install-peersest uniquement destiné à l'installation de la "peerDependencies"liste dans le package.json de votre projet. Vous essayez d'installer les fichiers "peerDependencies"répertoriés dans chacun de vos node_modules/<package>/package.jsonfichiers, pas vos dépendances directes entre pairs.
Will Farley
5

J'ai rencontré ces erreurs lorsque je développais un package npm peerDependencies. Je devais m'assurer que tous peerDependenciesétaient également répertoriés comme devDependencies. Le projet n'utiliserait pas automatiquement les packages installés globalement.

joshweir
la source
C'est une solution intéressante, car simplement ajouter aux «dépendances» est quelque peu maladroit!
Ashot
0

Installez le fil puis lancez

yarn global add install-peerdeps

Carlos
la source
-5

Exécutez ceci: npm install-test

Ivan Ferrer
la source