¿Cómo soluciono la advertencia npm UNMET PEER DEPENDENCY?

223

Estoy en Windows 10, con Node 5.6.0 y npm 3.6.0. Estoy tratando de instalar material angular y mdi en mi carpeta de trabajo. npm instala errores de mdi de material angular con:

+-- 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.

¿Cómo resuelvo esto para instalar AngularJS Material y MDI?

Reza
fuente
¿Este tipo de error crea algún problema?
blackHawk
No para Reza, por lo que es demasiado tarde, sino para cualquier otro ... Pruebe esto: npm view angular-material peerDependencies
peter70
1
En general, es posible que no siempre desee resolver una dependencia no satisfecha. Por ejemplo, si algún paquete tiene una dependencia de other-package@^1.5.0, y tiene [email protected] instalado, es posible que no necesite revertir la versión. Sería mejor probar si realmente tiene problemas con la versión más nueva.
John Pankowicz
1
Consulte también ¿Por qué existen las dependencias entre pares?
mikemaccana

Respuestas:

203

npm ya no instala las dependencias de pares, por lo que debe instalarlas manualmente, simplemente haga una npm installen las plataformas necesarias y luego intente instalar la principal nuevamente.


Responder al comentario:

está justo en ese mensaje, dice qué deps te estás perdiendo

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` 

Entonces necesitas npm install angular angular-animate angular-aria angular-material angular-messages mdi

Datsik
fuente
¿hay alguna manera de encontrar las plataformas para material angular para que pueda instalar?
Reza
2
¿Necesita agregar estas nuevas dependencias a su package.json?
0xcaff
2
@caffinatedmonkey que sería ideal
Datsik
99
@caffinatedmonkey si especifica el --saveconmutador npm actualizará su package.json por usted (o --save-devsi el paquete es una dependencia de desarrollo)
McGuireV10
33
¿No es el objetivo de npm que gestione todas esas dependencias por usted? si hago una instalación de npm, obtengo una lista de un montón de dependencias no satisfechas que debo agregar manualmente a mi archivo composer.json a mano, ¿qué valor obtengo de npm en ese momento?
chiliNUT
66

UNMET PEER DEPENDENCYse genera un error cuando package.jsonno se cumplen las dependencias de uno o más módulos especificados en el archivo. Verifique las advertencias cuidadosamente y actualice el package.jsonarchivo con las versiones correctas de las dependencias.

Entonces corre

rm -rf node_modules/
npm cache clean
npm install

Esto instalará todas las dependencias requeridas correctamente.

JayKrish
fuente
3
¿Qué es la dependencia de pares
aWebDeveloper
Cuando instala un paquete, a su vez puede depender de versiones específicas de otros paquetes. Si no proporciona una versión dependiente correcta del paquete, entonces no se cumple la "dependencia entre pares". Por lo tanto, debe actualizar la versión esperada de los paquetes dependientes para resolver eso.
JayKrish
44
Eso no funcionó para mí. Todavía recibí una advertencia sobre la necesidad de un compañero.
Adam Zerner
1
¡Mucho más limpio que la solución aceptada! Este conjunto de códigos maneja todos los casos posibles del problema del operador, en lugar del problema específico que tienen.
HoldOffHunger
el uso del comando npm cache clean genera el error: a partir de npm @ 5, el npm cache se repara automáticamente por 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. npm ERR! Si está seguro de que desea eliminar todo el caché, vuelva a ejecutar este comando con --force.
CodeMonkey
30

En mi caso, todas las dependencias ya estaban allí. Actualice NPM en ese caso, ya que podría haberse bloqueado. Resolvió mi problema.

npm install -g npm
Anuj Sharma
fuente
Trabajó para mi. Estaba recibiendo el error UNMET PEER DEPENDENCY typescriptcuando intentaba instalar tslint. una vez actualizado el npm, primero tuve que instalar typscript y luego instalar tslint.
Ravimallya
Por alguna razón, tuve que ejecutarlo más de una vez hasta que se actualizaron todas sus dependencias.
Coderer el
Esto rompió npm para mí y resultó en un montón de errores.
Jack
14

npm-install-peers funcionó para mí.

npm install -g npm-install-peers
alexoviedo999
fuente
1
No funcionó para mí: "Este paquete no parece tener ninguna dependencia de pares". Sin embargo, tengo varios mensajes como "npm ERR! Peer dep missing: @ angular / common @ ^ 5.0.0 || ^ 6.0.0, requerido por @ agm / core @ 1.0.0-beta.3"
Almir Campos
2
Este paquete solo instala los departamentos pares directos del paquete actual y los troqueles no manejan los departamentos pares de los departamentos del paquete (pares de niños).
Alex Skrypnyk
7

Una de las causas más posibles de este error podría ser que haya definido una versión anterior en su package.json. Para resolver este problema, cambie las versiones en package.json para que coincidan con las que npm se queja.

Una vez hecho esto, ejecuta npm install y ¡listo!

Thomas Mwania
fuente
6

Esta respuesta no se aplica a todos los casos, pero si no puede resolver el error simplemente escribiendo npm install , estos pasos pueden ser útiles.

Digamos que tienes este error.

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.

Esto significa que instaló la versión 4.2.0 del paquete A, pero [email protected] necesita la versión 3.xx de pakageA. ( explicación de ^ )

Por lo tanto, puede resolver este error degradando el paquete A a 3.xx, pero generalmente no desea degradar el paquete.
La buena noticia es que, en algunos casos, packageB simplemente no se mantiene al día con el paquete A y el responsable del mantenimiento del paquete B está tratando de aumentar la dependencia entre pares del paquete A a 4.xx
En ese caso, puede verificar si hay una versión superior del paquete B que requiere la versión 4.2.0 del paquete A en npm o github.

Por ejemplo, Ir a la página de lanzamientoingrese la descripción de la imagen aquí

A menudo puede encontrar cambios importantes sobre la dependencia como esta.

packageB v4.0.0-beta.0

BREAKING CHANGE
package: requires packageA >= v4.0.0

Si no encuentra nada en la página de lanzamiento, vaya a la página de emisión y busque el problema por palabra clave como peer. Puede encontrar información útil.

ingrese la descripción de la imagen aquí

En este punto tienes dos opciones.

1) Actualice a la versión que desee
2) Deje un error por el momento, espere hasta que se lance la versión estable.

Si elige la opción 1:
en muchos casos, la versión no tiene latest etiqueta, por lo tanto no es estable. Por lo tanto, debe verificar qué ha cambiado en esta actualización y asegurarse de que nada se rompa.

Si elige la opción 2:
Si la actualización de pakageA de la versión 3 a 4 es trivial, o si el responsable de mantenimiento de pakageB aún no probó la versión 4 de pakageA pero dice que no debería ser un problema, puede considerar dejar el error.

En ambos casos, es mejor probar a fondo si no rompe nada.

Por último, si quieres saber por qué tienes que hacer algo de forma manual, este enlace explica bien.

ohkts11
fuente
3

Ok, luché por mucho tiempo tratando de resolver esto. Aquí está la opción nuclear , para cuando haya agotado todas las demás formas ...

Cuando haya terminado, y todavía funciona, importe su código real a este nuevo proyecto. Solucione cualquier error de compilación de la versión más nueva de causas angulares.

Eso fue lo que hizo por mí ... 1 hora de retrabajo frente a 6 horas de tratar de descubrir qué estaba mal ... desearía haberlo hecho de esta manera para comenzar ...

usuario230910
fuente
OP está usando AngularJS
Edric
3

La respuesta dada no siempre funcionará. Si no soluciona su problema. Asegúrese de que también está utilizando el símbolo correcto en su package.json. Esto es muy importante para solucionar ese dolor de cabeza. Por ejemplo:

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".

Entonces mi mecanografiado debe estar entre 2.4.2 y 2.6 ¿verdad?

Así que cambié mi biblioteca de mecanografía de usar "typescript": "^2.7"a usar "typescript": "^2.5". Parece correcto?

Incorrecto.

Los ^medios que están de acuerdo con la NGP utilizando "typescript": "2.5"o "2.6"o "2.7"etc ...

Si quiere saber qué significa ^y ~qué significa ver: ¿Cuál es la diferencia entre tilde (~) y caret (^) en package.json?

También debe asegurarse de que el paquete existe. Tal vez no hay que "typescript": "2.5.9"buscar los números de paquete. Para estar realmente seguro, simplemente elimine el ~o el ^si no desea leer lo que significan.

Samuel Thompson
fuente
Gracias por esta explicacion. ¿Qué sucede si uso dos bibliotecas donde la primera (por ejemplo library-one) usa, por ejemplo, un par de package@<2.6y la otra ( library-two) un par de package@>2.7? Entonces, ¿tendré que lidiar con dos versiones de packagemi base de código? ¿Cómo sabré que cuando lo uso library-onetengo que usarlo [email protected]mientras tanto cuando lo uso library-twotengo que usarlo [email protected]?
tonix
2

Hoy disponible Angular 2 rc.7 , y tuve un problema similar con la [email protected]DEMANDA DE MIEMBRO INMEDIATA.

Si, como yo, simplemente reemplazó @angular/...rc.6a @angular/...rc.7- no es suficiente. Porque, por ejemplo, @angular/routerno tiene rc.6versión.

En este caso, revise mejor package.json en Inicio rápido

ktretyak
fuente
OP está usando AngularJS
Edric
-6

puede resolver instalando las dependencias UNMET a nivel mundial.

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

instalar cada uno por uno. Me ha funcionado.

Srinivas Jatoth
fuente
¿Es esta realmente la mejor solución, pensó? ¿Instalando globalmente para ignorar el "problema" real de las dependencias del proyecto?
qx3
1
Esto instalará dependencias globalmente en su máquina. Sus pares no podrán dar cuenta de esto en un entorno compartido.
AC Patrice