¿Por qué npm install dice que tengo dependencias insatisfechas?

404

Tengo un paquete de nodos. Cuando ejecuto npm installdesde la raíz del paquete, instala un montón de cosas, pero luego imprime varios mensajes de error que se ven así:

npm WARN dependencia insatisfecha / Users / seanmackesey / google_drive / code / explore / generator / node_modules / findup-sync / node_modules / glob requiere graceful-fs@'~1.2.0 'pero se cargará

Debo estar confundido acerca de lo que npm installhace exactamente . Si detecta una dependencia, ¿no debería instalarla? ¿En qué condiciones me da mensajes de error como este y cómo puedo resolver las dependencias?

Sean Mackesey
fuente

Respuestas:

397

Creo que es porque la resolución de dependencia está un poco rota, consulte https://github.com/npm/npm/issues/1341#issuecomment-20634338

Los siguientes son la posible solución:

  1. Necesita instalar manualmente los módulos de nivel superior, que contienen dependencias no satisfechas: npm install [email protected]

  2. Vuelva a estructurar su package.json. Coloque todos los módulos de alto nivel (sirve como dependencia para otros módulos) en la parte inferior.

  3. Vuelva a ejecutar el npm installcomando.

El problema podría deberse a que npm no pudo descargar todo el paquete debido al tiempo de espera u otra cosa.

Nota: También puede instalar los paquetes fallidos manualmente utilizando también npm install [email protected].

Antes de ejecutar npm install, realizar los siguientes pasos puede ayudar:

  • eliminar node_modules usando rm -rf node_modules/
  • correr npm cache clean

¿Por qué a veces es necesario 'eliminar node_modules'? Cuando un módulo anidado no se instala durante npm install, posteriormente npm installno detectará esas dependencias anidadas faltantes.

Si ese es el caso, a veces es suficiente eliminar la dependencia de nivel superior de los módulos anidados que faltan y npm installvolver a ejecutarlos . Ver

dule
fuente
22
La eliminación de los módulos de nodo y la limpieza de la memoria caché hicieron que funcionara para mí.
MarkoHiel
44
eliminar 'node_modules', ejecutar 'npm cache clean' y luego ejecutar 'npm install' solucionó mi problema. Tuve que ejecutar 'npm_install' tres veces, hasta que todas las dependencias se cargaron sin errores.
hendrix
2
si npm cache cleanno funciona por razones de acceso, intente sudo npm cache clean.
Soroush
12
@Soroush ciegamente solo agregando sudo a cosas que no funcionan bien no las arregla mágicamente, solo significa que no sabes lo que está sucediendo.
Edgar Aroutiounian
55
¿Por qué alguna otra "solución" para npm incluye rm r node_modules? ¿Y por qué esta es realmente la única opción en la mayoría de los casos? así no es como me imagino que debería funcionar un administrador de paquetes
phil294 02 de
83

Me sucedió cuando el WIFI se cayó durante un npm install. Quitarlo node_modulesy volver a ejecutarlo lo npm installarregló.

geon
fuente
26
y tratar npm cache clean.
ijse
55
Reinstalar el nodo probablemente no sea necesario, pero entre hacer eso npm cache cleany eliminarlo node_modules, este consejo funcionó para mí.
RichLitt
@RichLitt, Sí, hacer npm cache cleaneso no fue suficiente para mí, tuve que eliminarlo node_modulestambién para que funcione después de que la red fallara durante la "instalación".
Mark Tomlin
¿Estoy confundido sobre qué node_modulesdirectorio eliminar? Tengo un problema similar con el error/usr/local/lib/node_modules/npm/node_modules/read-installed/node_modules/readdir-scoped-modules requires graceful-fs@'^4.1.2'
wuliwong
1
@wuliwong El nivel superior uno.
geon
33

Solucioné el problema usando estas líneas de comando

  • $ rm -rf node_modules/
  • $ sudo npm update -g npm
  • $ npm install

¡Se hace!

zatamina
fuente
55
Después de ejecutar sudo npm update -g npm, mi npm se volvió inútil, cualquier intento de instalar cualquier cosa da como resultado "npm ERR! No se puede encontrar el módulo 'read-package-json'" voy a tener que rechazar el voto
MichaelB
Funcionó para mí y para otras personas, tal vez tengas otro problema. Intente instalar el módulo read-package-json globalmente sudo npm install -g read-package-jsono reinstale su npm
zatamine
8
advertencia: no debe usar sudo con npm, se sugiere cambiar los permisos o la propiedad del directorio que npm también quiere escribir.
Sgnl
1
podría querer agregar "npm cache clean" allí también
Alexander Mills
1
No usar sudocon npm
Grant
11

Actualizar NPM a la última versión puede ser de gran ayuda con esto. La respuesta anterior de dule es correcta al decir que la gestión de dependencias está un poco rota, pero parece que esto es principalmente para versiones anteriores de npm.

El comando npm listte da una lista de todos los instalados node_modules. Cuando actualicé de la versión 1.4.2 a la versión 2.7.4, muchos módulos que se marcaron anteriormente WARN unmet dependencyya no se anotaron como tales.

Para actualizar npm, debe escribir npm install -g npmen MacOSX o Linux. En Windows, descubrí que volver a descargar y volver a ejecutar el instalador de nodejs era una forma más efectiva de actualizar npm.

Stephen
fuente
Tuve el mismo problema con la versión npm distribuida en CentOS 7 repos. Instalé la última versión de npm de node.js, y el problema desapareció, así que creo que tienes razón, puede ser un problema con una versión anterior.
Elouan Keryell-Even
9

Las respuestas anteriores no me ayudaron completamente incluso después de eliminar el node_modulesdirectorio.

El siguiente comando me ayudó finalmente:

npm config set registry http://registry.npmjs.org/

Tenga en cuenta que esto extrae los módulos de nodo sobre una conexión HTTP insegura.

Src: https://stackoverflow.com/a/13119867/4082503

Vinay Vemula
fuente
Esto me ayudó, así como mi host estaba redirigiendo el tráfico.
dimiguel
1
@dimgl es bueno saberlo :)
Vinay Vemula
1
@Dejel, ¿intentaste las otras respuestas también? Puede que tenga que ejecutar npm installvarias veces y / o instalar manualmente algunos paquetes de nodos uno por uno.
Vinay Vemula
4

Por cada -- UNMET PEER DEPENDENCY, por ej. -- UNMET PEER DEPENDENCY [email protected], instala esa dependencia npm install --save [email protected]hasta que ya no tengas másUNMET DEPENDENCIES .

Buena suerte.

Akash
fuente
1
Me deja con los mismos errores, incluido uno nuevo:ERR! code 1
Wouter Vanherck
1
@WouterVanherck puede que intente rm -rf node_modules, a continuación, npm cache cleany npm install. Si todavía no funciona, te sugiero que lo hagas de nuevo rm -rf node_modules, de vez en npm i -g yarncuando yarn install. El hilo es bastante bueno para administrar node_modules. Buena suerte.
Akash
1
Sí, para eso peerDependenciessirve. Para empujarlo a una elección consciente de la versión.
Kamafeather
3

I ejecutar npm liste instalados todos los paquetes listados como INSATISFECHAS DEPENDENCIA

Por ejemplo:

├── UNMET DEPENDENCY css-loader@^0.23.1
npm install css-loader@^0.23.1

achasinh
fuente
2

Esto lo resolvió para mí:

  1. Corrija los números de versión package.json, de acuerdo con los errores;
  2. Eliminar node_modules( rm -rf node_modules);
  3. Vuelva a ejecutar npm install.

Repita estos pasos hasta que no haya más errores.

usuario1585939
fuente
1

Algo similar, agregaría otro paso.

Tenga en cuenta que en la versión npm> 1.4.9, 'npm install' instala devDependencies. Primero intente eliminar los módulos y caché existentes:

remove node_modules $ rm -rf node_modules/
run $ npm cache clean

Entonces intenta:

npm install --dev
npm update --dev

Esto al menos resolverá la resolución de dependencia recursiva.

John Doe
fuente
66
¿Para qué sirve la bandera --dev?
Alexander Mills
1

--dev instalando devDependencies de forma recursiva (y se ejecuta para siempre ...) ¿cómo puede ayudar a resolver las diferencias de versión?

Puede intentar eliminar la carpeta node_moduls, luego limpiar el caché npm y luego ejecutar 'npm i' nuevamente

arielhad
fuente
1

Tuve un problema similar mientras instalaba la React Native CLI. No estaba seguro de qué /node_modulesdirectorio debía eliminar después de leer las respuestas aquí. Finalmente acabo de correr

npm update -g

y pude instalar el paquete después de eso.

wuliwong
fuente
1

Estaba tratando de trabajar en un sistema de implementación automatizado que se ejecuta npm install, por lo que muchas de estas soluciones no funcionarían para mí en un fasion automatizado. No estaba en condiciones de eliminar / volver a crear node_modules/ni podía cambiar fácilmente las versiones de Node.js.

Así que terminé corriendo npm shrinkwrap, agregando el npm-shrinkwrap.jsonarchivo a mi paquete de implementación y ejecutando instalaciones desde allí. Eso solucionó el problema para mí; con el archivo retráctil como 'ayuda', npm parecía poder encontrar los paquetes correctos e instalarlos para mí. (Shrinkwrap también tiene otras características, pero esto era para lo que lo necesitaba en este caso particular).

Uberbrady
fuente
1

Encontré este problema cuando estaba instalando paquetes de reacción y esto funcionó para mí: npm install --save <package causing this error>

korp
fuente
1

En mi caso, la actualización de npm lo resolvió.

sudo npm install -g npm
Marcelo Gumiero
fuente
1

npm installinstalará todos los paquetes desde npm-shrinkwrap.json, pero podría ignorar los paquetes enpackage.json , si no están preestablecidos en el primero.

Si su proyecto tiene un npm-shrinkwrap.json, asegúrese de ejecutar npm shrinkwrappara regenerarlo, cada vez que agregue agregar / eliminar / cambiar package.json.

Mario
fuente
0

Actualizando a 4.0.0

Actualizar a 4 es tan fácil como actualizar sus dependencias angulares a la última versión, y verificar dos veces si desea animaciones. Esto funcionará para la mayoría de los casos de uso.

En 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 

En 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

Luego ejecute el comando ng serve o npm start que usa normalmente, y todo debería funcionar.

Si confía en las animaciones, importe las novedades BrowserAnimationsModuledesde @angular/platform-browser/animationssu raíz NgModule. Sin esto, su código se compilará y ejecutará, pero las animaciones provocarán un error. Las importaciones de @angular/corequedaron en desuso, use las importaciones del nuevo paquete

import { trigger, state, style, transition, animate } from '@angular/animations';.
Aman Agnihotri
fuente