NPM no instala dependencias de módulos

151

Este es mi package.jsonpara el módulo que estoy incluyendo en el proyecto principal:

{
  "version": "0.0.1",
  "name": "module-name",
  "dependencies": {
    "express": "3.3.4",
    "grunt": "0.4.1",
    "grunt-contrib-compass": "0.4.0",
    "grunt-contrib-copy": "0.4.1",
    "grunt-contrib-cssmin": "0.4.1",
    "grunt-contrib-jshint": "0.6.3",
    "grunt-contrib-requirejs": "0.4.1",
    "grunt-contrib-uglify": "0.2.2",
    "grunt-contrib-watch": "0.5.1",
    "grunt-express-server": "0.4.1",
    "grunt-karma": "0.4.5",
    "grunt-regex-replace": "0.2.5",
    "request": "2.25.0"
  },
  "scripts": {
    "postinstall": "grunt install"
  }
}

Una cosa a tener en cuenta es que este módulo está contenido en un repositorio privado y lo incluyo en el padre package.jsoncomo:"module-name": "git+ssh://git@myserver:user/module-name.git"

Ahmed Nuaman
fuente
Su package.json se ve bien, al igual que la línea que usa para incluirlo. ¿Recibe un mensaje de error? ¿Está Git en tu camino?
poida
1
No recibo ningún error per sa, el módulo se instala pero mi postinstallscript falla porque los gruntpaquetes locales no se encuentran porque NPM no los instala
Ahmed Nuaman
1
Este problema todavía existe en noviembre de 2016. Hice una instalación limpia de un módulo de trabajo en una computadora nueva. La respuesta de @ Mohsen lo arregló.
Joe Lapp

Respuestas:

152

Parece que has encontrado un error que existe desde hace bastante tiempo y que aún no tiene solución. Hay varios problemas abiertos para este caso en el repositorio npm:

En el primero, las personas enumeran varias soluciones que puede probar.

Una solución alternativa puede ser (un poco hack) para enumerar explícitamente las dependencias como dependientes de primer nivel. Esto requiere que mantenga la lista, pero prácticamente tiene que hacerse con muy poca frecuencia.

allprog
fuente
1
@ Flame2057 es bueno saber que no tienes suerte, aunque no demasiado informativo. Puede seguir adelante y formular una pregunta, es de esperar que la comunidad tenga el conocimiento para resolver. ¡Que te diviertas!
allprog
Se necesitaba un paso adicional para mí. Tuve que hacer clic derecho en "Dependencias" en mi proyecto y elegir "Restaurar paquetes" después de hacer otros pasos mencionados aquí (eliminar node_modules y package.lock.json, luego npm install).
Taersious
113

Tuve un problema muy similar, eliminar la node_modulescarpeta completa y volver a instalar me funcionó. ¡Aprendí este truco del espectáculo IT Crowd !

rm -rf node_modules
npm install
Mohsen
fuente
Esto realmente funcionó para mí. Creo que eso es realmente extraño: ¿qué está causando ese problema técnico? De todos modos, si elimino la carpeta y vuelvo a ejecutar npm install, entonces funciona. De antemano, nada se instalaría en ese subdirectorio. Ahora, todo se instala allí.
CtheGood
Gracias @Moshen. Había eliminado una versión anterior de Node e hice una instalación limpia. Eliminé todos mis node_modules / globalmente pero olvidé eliminarlos de algunas aplicaciones existentes. Tuve que eliminar la carpeta node_modules en el directorio de cada aplicación existente y luego ejecutarla npm install.
wilblack
El viejo "¿intentaste reiniciar desde cero ?". Esto funciono muy bien para mi.
Marco Aurélio Deleu
Si bien es bueno saber que hay una solución, esto realmente huele a 'reiniciar su máquina e intentarlo de nuevo' y simplemente oculta el verdadero problema. Tengo un problema similar con la instalación de NPM (el proceso sale inmediatamente sin mensaje) y una de las soluciones es eliminar la carpeta node_modules y reinstalar; lo cual no me llena de confianza de que entendemos lo que está sucediendo aquí.
Kelly S. French
1
Esto funcionó para mí. Si pudiera hacer +1 nuevamente para la referencia de IT Crowd, lo haría.
texelate el
32

Estoy usando la máquina de Windows.

  1. Eliminé la carpeta node_modules.
  2. De alguna manera, el archivo package.lock.json se está creando. Eliminé ese archivo.
  3. Entonces npm instalar.
  4. Construcción limpia.
  5. Correr.
Virat18
fuente
14
Esta respuesta necesita obtener más amor. El archivo package.lock.json me estaba jodiendo.
mwilcox
16

si heredó este código, podría ser que las dependencias y versiones estuvieran bloqueadas y que tuviera un archivo ./npm-shrinkwrap.json.

Si su dependencia no figura en ese archivo, nunca se instalará con el npm installcomando.

deberá instalar manualmente los paquetes y luego ejecutarlos npm shrinkwrappara actualizar el archivo retráctil.

Rico Rodriquez Collins
fuente
2
Tuve un problema en el que la instalación manual de un paquete había creado un package-lock.jsonarchivo después de actualizar al nodo 8.0.0 y npm 5.0.0. Después de eso, la ejecución npm installsolo instalaría ese paquete en lugar de todas mis dependencias. Eliminar package-lock.jsony volver a ejecutar me npm installresolvió el problema.
Monkpit
1
@Monkpit Eso también lo resolvió para mí, ¡gracias! package-lock.jsonse estaba interponiendo en el camino.
VirtualWolf
10

Sospecho que está enfrentando el problema de que su package.jsonarchivo no está en el mismo directorio que el suyo Gruntfile.js. Cuando ejecuta sus grunt xxxcomandos, recibe un mensaje de error como:

Local Npm module "xxx" not found. Is it installed?

Por ahora, la solución es:

  • Cree package.json en el mismo directorio que Gruntfile.js
  • Define los módulos requeridos por tu proyecto gruñido
  • Ejecutar npm installpara cargarlos localmente
  • Ahora el comando gruñido requerido debería funcionar.

En mi humilde opinión, es triste que no podamos tener módulos de resolución grunt cargados desde un módulo npm padre (es decir, package.json en un directorio padre dentro del mismo proyecto). La discusión aquí parece indicar que se hizo para evitar cargar módulos "globales", pero creo que lo que queremos es cargar desde módulos "mi proyecto".

kctang
fuente
Entonces, esta es la estructura de mi proyecto principal (ese es el que importa el proyecto del submódulo): cl.ly/image/020E0b3I0t1A y la estructura de mi proyecto del submódulo : cl.ly/image/2q0L3l1v0s40 ; puede ver que ambos contienen Gruntfile.jsy ambos contienen package.jsonel mismo nivel.
Ahmed Nuaman el
1
Esto no es un problema grunt, es un problema con la npminstalación recursiva de las dependencias en mi proyecto de submódulo.
Ahmed Nuaman el
9

OP puede ser cierto para una versión anterior del nodo. Sin embargo, también enfrenté lo mismo con el nodo 4.4.1.

Muy bien puede estar vinculado a la versión de nodo que está utilizando. Intenta actualizar a una última versión. Ciertas dependencias no se cargan transitivamente si son incompatibles con la versión del nodo.

Encontré esto corriendo npm update.

Después de actualizar a la última versión (4.4 -> 5.9); Esto se solucionó.

Nrj
fuente
8

En mi caso ayudó a eliminar node_modulesy package-lock.json.

Después de eso simplemente reinstale todo con npm install.

Lars Kliesing
fuente
8

También verifique que el nombre de su paquete sea aceptado correctamente:

INCORRECTO:

{
    "name":"My Awesome Package"
}


CORRECTO

{
    "name": "my-awesome-package-name"
}
Cayo
fuente
1
Sí, tenía un espacio en el nombre y no se instaló correctamente.
Ansjovis86
1
no solo por el espacio, también se trata del '-' que usó en el nombre, también me he enfrentado al mismo problema, poner - o _ en el nombre, funcionará.
molagbal
4

Es posible que deba instalar el grunt-cli, intente esto antes de realizar una instalación npm:

sudo npm install -g grunt-cli

Eso soluciona que el gruñido no salga para mí, también necesitarás un archivo gruñido válido.

Fuente: https://stackoverflow.com/a/16456467/241294

poida
fuente
¿Qué sucede cuando prueba el comando 'gruñido' en el símbolo del sistema? ¿Existe en tu camino? Tienes razón, parece que está instalado desde tu pastebin. ¿Lo instaló con sudo y -g?
poida
No es un problema con gruñidos:~ ᐅ which grunt /opt/local/bin/grunt
Ahmed Nuaman
También cuando clonar el repositorio en sí, en lugar de a través de la NGP y correr npm instally grunt install, trabaja muy bien. El problema es que NPM no parece instalar las dependencias del repositorio como se especifica en elpackage.json
Ahmed Nuaman
¿En qué directorio está buscando las dependencias de paquetes? No deberían estar en el nivel superior, sino en: paquete de nivel superior / node_modules / module-name / node_modules. ¿Podría ser que Grunt no encuentre el archivo Grunt porque está funcionando en el directorio incorrecto?
poida
No es un problema grunt, cuando instala módulos con NPM, generalmente proporciona un resumen al final de cualquier dependencia de ese módulo que ya se haya instalado; cuando instalo el módulo en cuestión no recibo un resumen de los módulos de dependencia instalados.
Ahmed Nuaman el
4

En caso de que alguien esté sufriendo esta situación y cometa el mismo error que yo, he aquí lo que sucedió en mi caso. Después de golpear mi cabeza contra la pared durante una hora, me di cuenta de que mi json estaba anidado incorrectamente y que las "dependencias" clave estaban dentro del "repositorio" clave.
No hace falta decir que no hubo errores evidentes y que no se instalaron módulos.

dgo
fuente
3

Otra forma de solucionar esto es agregar esto a la package.jsonsección de scripts del módulo

"preinstall": "npm install {Packages You depend on}"

lo que esto hará es que instalará todos los paquetes que necesita el módulo y no obtendrá ese error.

Ahmed Fathy
fuente
3

sucede con la versión anterior del nodo. use la última versión del nodo de esta manera:

$ nvm use 8.0
$ rm -rf node_modules
$ npm install
$ npm i somemodule

editar: también asegúrese de usted save.
p.ej:npm install yourmoduleName --save

Deke
fuente
2

Recibí este error cuando instalé un entorno de desarrollo de Nodo limpio en Windows.

Para solucionar esto, entré en mi nuevo directorio de proyectos (con el que acabo de andamiar yo angular) y escribí dos comandos:

npm install -g grunt --save-dev

Eso instalará las dependencias locales de gruñidos en su proyecto. Próximo:

npm install

Eso asegurará que todas las dependencias de su (nuevo) proyecto estén instaladas.

Tada!

Jesse Lawson
fuente
2

Vale la pena mencionar para asegurarse de que sus dependencias deben estar en la dependenciesparte de su package.json(en lugar de devDependencies).

Mi problema era básicamente el mismo que OP:

  • instalando un repositorio privado (vamos a llamarlo repo1) a través "module-name": "git+ssh://git@myserver:user/my-repo-name.git"de otro repositorio (vamos a llamarlo repo2),
  • en repo2's node_modules, una dependencia de paquete de repo1no estaba allí.
  • ¡Mi error tonto! ... repo1fue enumerar esa dependencia en devDependencieslugar dedependencies
  • Mover la dependencia en mis repo1's package.jsonde devDependencies adependencies
  • En mi repo2, eliminé mi node_modulesy package-lock.json, ¡lo hice npm install, un voilà! ... ¡había dependencia!
cafesanu
fuente
Había declarado la variable de entorno NODE_ENV = production en mi Dockerfile sobre el comando npm install, lo que hace que no se instalen devDependencies
Pieter De Clercq
0

Yo tuve el mismo problema. Pero en la misma máquina, un proyecto tenía un buen paquete.json, donde todas mis dependencias se instalaron correctamente. Y en otro proyecto, mis dependencias package.json no se instalaron sin importar lo que haga. Acabo de copiar el paquete.json y pegué en ese otro proyecto. ¡Y funcionó! La diferencia que encontré fue solo una línea vacía al comienzo del archivo. No sé o influye en algo, tal vez algún otro problema. Pero el problema era solo el archivo package.json.

mansim
fuente
0

Creo que también enfrenté este problema, y ​​la mejor solución que encontré fue mirar mi consola y descubrir el error que se estaba produciendo. Entonces, lo leí cuidadosamente y descubrí que el problema era que no especificaba mi repositorio, descripción y nombre válido en mi package.json. Agregué esos datos y todo estuvo bien.

WinnersProx
fuente