¿Cómo instalar las dependencias pares npm automáticamente?

274

Por ejemplo, cuando instalo 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.

¿Hay una bandera mágica que pueda pasar a npm que también instalará las dependencias de pares? No he podido encontrar uno ... Es tedioso copiar y pegar manualmente las dependencias del mismo nivel y asegurarme de tener las versiones correctas.

En otras palabras, prefiero no tener que hacer:

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

¿Cuál es la mejor manera?

Douglas Ludlow
fuente
¿Ya has resuelto ese problema? Tengo el mismo problema al instalar angular2. Incluso después de instalar manualmente es6-promise con -g flag y volver a intentar npm install -g angular2 obtengo el mismo Error / Advertencia de 5 dependencias pares no satisfechas es6-promise, es6-shim, reflect-metadata, rxjs y zone.js
nttakr
44
@nttakr: sí, la instalación de las versiones exactas que desea como dependencias pares elimina la advertencia. No desea instalarlos globalmente (con el indicador -g). Desea instalarlos localmente (indicador -S), pero como dije, deben ser las versiones exactas (es decir, [email protected]requiere es6-promise@^3.0.2). Sin embargo, quiero saber si hay un comando / indicador que instala automáticamente las dependencias del mismo nivel.
Douglas Ludlow
@DouglasLudlow ¿qué versión de NPM estás usando?
peteb
@peteb: npm -v=>3.5.3
Douglas Ludlow
Tengo el mismo problema, y ​​no he encontrado el rendimiento de la solución ...
youngwind

Respuestas:

178

La instalación automática de dependencias entre pares se eliminó explícitamente con npm 3, ya que causa más problemas de los que intentó resolver. Puedes leer sobre esto aquí, por ejemplo:

Entonces no, por las razones dadas, no puede instalarlas automáticamente con npm 3 hacia arriba.

migg
fuente
44
Sí, vi esto: github.com/npm/npm/issues/6565 ... Solo esperaba que pudieras instalarlos opcionalmente con una bandera o algo así. Supongo que tendré que abrir un problema o algo.
Douglas Ludlow
157
¿Cómo manejas este tipo de problema? No soy un experto en npm, así que cuando leo "x requiere un par de y pero no se encontró ninguno", me pregunto, "¿qué par?" y "¿cómo puedo hacer que todo vuelva a funcionar?" ¿Hay un proceso? ¿Excava el código de x e y hasta que descubre lo que falta? Una vez que descubres lo que falta, ¿qué haces a continuación? ¡Gracias!
Dan Cancro
81
Ah, es un problema de inglés: "x requiere un par de y pero no se instaló ninguno" debería ser "x requiere el par, y, pero y no se instaló". Lo entendí como "x requiere uno de los pares de y, pero ese par no estaba instalado y no le estamos diciendo cuál de los pares de y necesita".
Dan Cancro
1
Además, si instalo manualmente las dependencias pares enumeradas, las obtengo como extraneouspaquetes
plsnoban
3
Hay "extraños" porque necesita agregarlos a sus dependencias de paquetes.
Dinoboff
37

Lo resolví reescribiendo package.json con los valores exactos de advertencias sobre:

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: "reflect-metadata": "0.1.2",

Delete node_modules directory

npm install
MrLehiste
fuente
15
¿Quizás un npm cache clean, npm installpuede ser mejor que limpiar node_modules? Siempre me abstengo de eliminar node_modules, me gusta averiguar cuál es el problema en lugar de eliminar el directorio.
Bruno
No creo que esta sea una idea muy segura para que la gente simplemente lo haga funcionar. Tienen mayores cambios para empeorar sus conflictos: tener un código que no coincide con su biblioteca.
zoomlar
Recibí el siguiente mensaje de error al intentar ejecutar npm clean cache: npm ERR! A partir de npm @ 5, el caché npm se cura automáticamente de los problemas de corrupción y se garantiza que los datos extraídos del caché serán válidos. Si desea asegurarse de que todo sea consistente, use 'npm cache verificar' en su lugar. Por otro lado, si está depurando un problema con el instalador, puede npm install --cache /tmp/empty-cacheusar un caché temporal en lugar de eliminar el actual. npm ERR! npm ERR! Si está seguro de que desea eliminar todo el caché, vuelva a ejecutar este comando con --force.
Tarun
22

Código de trucos útil en este escenario y algunos otros ...

├── DEMANDA DE PAREJA NO REUNIDA @ angular / común @ 4.0.2

├── DEPENDENCIA IGUAL DE UNMET @ angular / compilador @ 4.0.2

├── DEMANDA DE PAREJA NO REUNIDA @ angular / compiler-cli @ 4.0.2

├── DEPENDENCIA DE PARES NO REUNIDAS @ angular / core @ 4.0.2

├── DEPENDENCIA DE PARES NO REUNIDAS @ angular / formas @ 4.0.2

├── DEPENDENCIA DE PARES NO REUNIDAS @ angular / http @ 4.0.2

├── DEPENDENCIA IGUAL DE UNMET @ angular / platform-browser @ 4.0.2

├── DEPENDENCIA IGUAL DE UNMET @ angular / platform-browser-dynamic @ 4.0.2>

  1. copia y pega tu error en tu editor de código.
  2. Resalta una parte no deseada con tu cursor. En este caso, '├── DEPENDENCIA DE PARES NO REUNIDAS'
  3. Presione comando + d varias veces.
  4. Presione eliminar dos veces . (Presione la barra espaciadora si accidentalmente resaltó '├── DEMANDA DE LA DEPENDENCIA DE PARES').
  5. Presione hacia arriba una vez. Agregue 'npm install'
  6. Presione hacia abajo una vez. Agregar '- guardar
  7. Copia tus cosas nuevamente en el cli y corre

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

zoomlar
fuente
8
--saveEvidentemente, la opción ya no es necesaria a partir de npm 5.0.0: stackoverflow.com/a/19578808/12484
Jon Schneider el
12

El proyecto npm-install-peersdetectará pares y los instalará.

Por v1.0.1lo tanto, no admite la escritura package.jsonautomática, lo que esencialmente resolvería nuestra necesidad aquí.

Agregue su apoyo para emitir en vuelo: https://github.com/spatie/npm-install-peers/issues/4

profundización
fuente
36
Al correr, me dio este mensaje. This package doesn't seem to have any peerDependencies
Thabung
2
Tengo el mismo mensaje
Thibault Boursier
77
Según tengo entendido, npm-install-peersse instalará peerDependenciesregistrado en package.json. No instalará peerDependenciesdependencias como angular2.
drizzd
Sí, al segundo comentario de @drizzd: npm-install-peerssolo está destinado a instalar los "peerDependencies"listados en el paquete de su proyecto.json. Está intentando instalar la "peerDependencies"lista de cada uno de sus node_modules/<package>/package.jsonarchivos, no sus dependencias directas entre pares.
Will Farley
5

Experimenté estos errores cuando estaba desarrollando un paquete npm que tenía peerDependencies. Tenía que asegurarme de que alguno peerDependenciestambién figurara como devDependencies. El proyecto no usaría automáticamente los paquetes instalados globalmente.

joshweir
fuente
Esta es una solución ordenada, ya que simplemente agregar 'dependencias' es algo torpe.
Ashot
0

Instale hilo y luego corra

hilo global agregar instalación-peerdeps

Carlos
fuente
-5

Ejecute esto: npm install-test

Ivan Ferrer
fuente