¿Cómo resuelvo el error "No se puede encontrar el módulo" usando Node.js?


617

Después de extraer un módulo de GitHub y seguir las instrucciones para compilarlo, trato de incorporarlo a un proyecto existente usando:

> npm install ../faye

Esto parece hacer el truco:

> npm list
/home/dave/src/server
└─┬ faye@0.7.1
  ├── cookiejar@1.3.0
  ├── hiredis@0.1.13
  └── redis@0.7.1

Pero Node.js no puede encontrar el módulo:

> node app.js
node.js:201
        throw e; // process.nextTick error, or 'error' event on first tick
              ^
Error: Cannot find module 'faye'
    at Function._resolveFilename (module.js:334:11)
    at Function._load (module.js:279:25)
    at Module.require (module.js:357:17)
    at require (module.js:368:17)
    at Object.<anonymous> (/home/dave/src/server/app.js:2:12)
    at Module._compile (module.js:432:26)
    at Object..js (module.js:450:10)
    at Module.load (module.js:351:31)
    at Function._load (module.js:310:12)
    at Array.0 (module.js:470:10)

Realmente quiero entender lo que está sucediendo aquí, pero estoy un poco perdido en cuanto a dónde mirar a continuación. ¿Alguna sugerencia?


8
Se node_modulesespera que el directorio esté en la raíz de su proyecto, junto app.jscon su caso. ¿Por qué ..usaste la ruta de instalación de npm?
Alex Wayne

1
Después de cambiar "npm install ../faye" a "npm install ../faye/build", funciona como se esperaba. No sé qué tan típico es esto, pero Faye crea un directorio de compilación cuando se construye y pone una copia de package.json allí. npm no se queja de package.json en el nivel raíz, pero hace referencia a archivos que no existen en ese nivel.
Dave Causey

2
Resolví el problema, pero realmente no obtuve ninguna solución a mi pregunta real, que era cómo solucionar este problema. Trataré de presentar algunas sugerencias para mejorar npm y / o nodo para que sea más fácil para los recién llegados evitar esta situación.
Dave Causey

1
Ir a través de este enlace , puede tener una idea de dónde exactamente no está buscando sus módulos ..
Amol M Kulkarni

1
¿Verifica si está en la misma carpeta donde lo instaló? si no lo instaló globalmente.
Ashwani Panwar

Respuestas:


513

El uso npm installinstala el módulo solo en el directorio actual (en un subdirectorio llamado node_modules). ¿Se encuentra app.js debajo home/dave/src/server/? Si no es así y desea utilizar el módulo desde cualquier directorio, debe instalarlo globalmente npm install -g.

Normalmente instalo la mayoría de los paquetes localmente para que se registren junto con mi código de proyecto.

Actualización (8/2019):

Hoy en día puede usar el archivo package-lock.json , que se genera automáticamente cuando npm modifica su directorio node_modules. Por lo tanto, puede omitir el ingreso de paquetes, ya que package-lock.jsonrastrea las versiones exactas de sus node_modules que está utilizando actualmente. Para instalar paquetes desde en package-lock.jsonlugar de package.jsonusar el comando npm ci.

Actualización (3/2016):

He recibido muchas críticas por mi respuesta, específicamente que verifico los paquetes de los que depende mi código. Hace unos días, alguien no publicó todos sus paquetes ( https://kodfabrik.com/journal/i-ve-just-liberated-my-modules ) que rompieron React, Babel y casi todo lo demás. Esperemos que ahora esté claro que si tiene un código de producción, no puede confiar en que NPM realmente mantenga sus dependencias por usted.


264
"Normalmente instalo la mayoría de los paquetes localmente para que se registren junto con mi código de proyecto". Por lo general, es mejor hacer una package.jsonlista de los módulos npm de los que depende e ignorar la node_modulescarpeta. Luego, simplemente npm installpara obtener la configuración después de clonar el repositorio.
Alex Wayne

53
Además de package.jsonenumerar las dependencias, me gusta mantener copias conocidas de las cosas de las que dependo. El espacio en disco es económico y si npm o el paquete desaparece de npm, todavía tendré un proyecto completamente funcional en mi repositorio.
Bill

165
Como desarrollador anterior, casi me ahogo cuando leo el "paradigma" de los desarrolladores de Node de que "el espacio en disco es barato". Tengo bibliotecas que estoy usando. La idea de que podría tener 100 copias (o peor, CERCA de copias) me revuelve el estómago. El espacio en disco es económico, pero el tiempo de mantenimiento es costoso. Quizás si está haciendo un proyecto de juguete único, el mantenimiento es barato. Sin embargo, para un trabajo real, el mantenimiento es costoso y no tiene relación con el costo del espacio en disco.
Lloyd Sargent

66
Realmente no entiendo este último comentario. Nadie dice tener 100 copias de ningún código, solo tener 1 copia del código del que depende su proyecto. La alternativa es tener un proyecto no funcional si NPM o la dependencia desaparece algún día. Creo que volver a escribir una dependencia desde cero también es bastante costoso. Además, trabajé en Microsoft durante 10 años y siempre teníamos dependencias de terceros registradas en nuestro árbol de origen.
Bill

33
@LloydSargent Tener "CERCA de copias" no es peor, es mejor , porque cada proyecto tiene una dependencia específica, que usted ha definido, y el resto de su código depende. Si tenía las mismas versiones en varios proyectos, entonces si actualiza algo , debe actualizar todo . La fijación de dependencias permite actualizaciones parciales, sustancialmente menos mantenimiento. Trabajo real, proyectos que no son de juguete.
Dave Newton

459

Tuve un problema muy similar. Eliminar la node_modulescarpeta completa y volver a instalar funcionó para mí:

rm -rf node_modules
npm install

13
También haría una limpieza de caché npm, solo como una cosa de seguridad :)
Tony Tai Nguyen

1
Probablemente sea un buen primer paso para la resolución de problemas cada vez que aparece un problema de dependencia extraño que npm install/ npm updateno resolverá. Esto resolvió un problema en el que se Error: Cannot find module 'http-errors'mostraba aleatoriamente cuando intentaba ejecutar mi aplicación Express.
Matt Vukas

Increíble, la respuesta de @ descuidadamente Choosy resolvió una dependencia que faltaba. Parece que actualizar y degradar con la instalación de npm en su lugar no mantiene las cosas ordenadas.
anguila ghEEz

3
Un paso que falta aquí es eliminar el archivo package-lock.json antes de ejecutarlo npm install.
Rick Quantz

esto no funcionó para mí, incluso reinició la computadora;)
Jason G

83
npm install --save module_name

Por ejemplo, si el error es:

{[Error: No se puede encontrar el código del módulo '/root/.npm/form-data']: 'MODULE_NOT_FOUND'}

entonces puede resolver este problema ejecutando el comando npm install --save form-data.


1
parece que cuando lo instalé globalmente, la carpeta npm / node-modules estaba vacía y estaba tratando de usarla ng new project-name, mostraba que faltaban algunos módulos ... Tuve que instalarlos cada uno usando el comando dado. Entonces resolvió el problema pero está ¿Hay algún comando único para instalarlos todos a la vez?
Vishal Nair

25

Para los usuarios de TypeScript, si está importando un módulo de Nodo incorporado (como http, patho url) y está obteniendo un error, "Cannot find module "x"entonces el error se puede solucionar ejecutando

npm install @types/node --save-dev

El comando importará las definiciones de NodeJS TypeScript en su proyecto, permitiéndole usar los módulos integrados de Node.


18

Esto sucede cuando un primer npm instalación de ha por algún motivo (SIGINT of npm), o si el retraso fue demasiado largo o los datos están dañados. Intentar una instalación npm nuevamente no salvará el problema.

Algo salió mal en la primera comprobación de npm, por lo que la mejor opción es eliminar el archivo y reiniciar la instalación de npm.


16
Esto diagnosticó el problema para mí. Terminé haciendo npm cache cleary limpiando node_modules seguido de npm installpara solucionar mi problema.
Meklarian

9

Si usa nvm, verifique que los módulos de nodo existentes que son enlaces a otras bibliotecas estén compilados para la versión correcta de Node.js.

Estaba teniendo el mismo error. La razón fue la siguiente: usamos nvm ya que estamos ejecutando dos aplicaciones en un servidor, una requiere Node.js 5.6 porque usa node-gd (que no se ejecuta en Node.js 6 por ahora), la otra requiere Node.js 6. Node.js 6 es la instalación de apt-get .

También utilizamos la herramienta pm2 para implementar.

Por lo tanto, la configuración predeterminada es que el proceso pm2 comienza cuando nvm no está vigente, por lo que utiliza la instalación apt-get de Node.js (versión 6). Entonces, el demonio principal pm2 comienza con Node.js 6. Si ejecuto aplicaciones en modo fork, comienzan en procesos separados y la configuración de nvm está vigente. Cuando ejecuto aplicaciones en modo de clúster, heredan el entorno no nvm.

Entonces, cuando intenté cambiar al modo de clúster, la aplicación no se pudo iniciar porque los enlaces compilados para 5.6 fallan con este mensaje.

Lo arreglé reiniciando pm2 cuando los ajustes nvm están en vigor. También los scripts de inicio deben ser reparados.


¿Cómo se verifica eso?
tamj0rd2

8

Compruebe si la variable de entorno NODE_PATH está configurada correctamente y apunta a la ruta node_modules. nodejs usa esta variable para buscar las bibliotecas


Me upvoted esto, ya que resolvió mi problema inmediato, y me llevó a esta documentación Node.js . Pero creo que esta no es una respuesta general, ya que la documentación indica estrategias alternativas para ubicar módulos.
Graham Klyne

6

Experimenté este error ayer. Me tomó un tiempo darme cuenta de que la mainentrada package.jsonapuntaba a un archivo que había movido. Una vez que actualicé eso, el error desapareció y el paquete funcionó.


2
Santa vaca ... por desesperación escribí "Error: no se puede encontrar el módulo" en google, y encontré esta pregunta. Tu respuesta solucionó mi problema. No puedo creer que un término de búsqueda tan vago haya dado la respuesta correcta. Felicitaciones a ti y a Google!
Jamon Holmgren

1
Mucho esto. Había logrado apuntar la mainentrada para mi submódulo en un directorio que estaba excluido de su repositorio, así que cuando intenté incluirlo a través de npm installél funcionó, ¡pero no se encontraron exportaciones cuando fue necesario! Muchas gracias por esta respuesta obvia pero útil.
Dragos

Gracias por esto. Tuve esta situación mientras usaba espacios de trabajo de Yarn, por lo que estaba buscando algoritmos de resolución de ruta y todo tipo. :) Me sorprendió la forma en que el mensaje de error habla de "localizar" el módulo, y también de que ESLint estaba dando mensajes de error similares. Y luego vi tu respuesta y me di cuenta de que era un tonto. ¡Gracias!
Mark Birbeck

5

Elimine su node_modulecarpeta raíz de su proyecto (por ejemplo:) myApp. Vaya a la myAppcarpeta y luego escriba el siguiente comando desde la terminal

>myApp>npm install

Instalará todos los módulos de dependencia necesarios para su proyecto.


¿Podría por favor elaborar más su respuesta agregando un poco más de descripción sobre la solución que proporciona?
abarisone

5

Este error se puede encontrar si está requirecreando un módulo que tiene un maincampo faltante o incorrecto en su package.json. Aunque el módulo en sí está instalado, npm / node tiene que usar un único archivo .js como punto de entrada a su módulo. Si el maincampo no está allí, el valor predeterminado es buscar index.jsen la carpeta de su módulo. Si el archivo principal de su módulo no se llama index.js, no podrárequire hacerlo.

Descubierto al convertir un browserifymódulo basado en un requiremódulo compatible con CommonJS; browserifyno le importaba el maincampo faltante , por lo que el error pasó desapercibido.


4

Especifique la ruta a la carpeta del restler, que estará dentro de la carpeta node_modules como: var rest = require ('./ node_modules / restler');

Esto funcionó para mí.


3

Si está utilizando el mecanografiado y obtiene un error después de instalar todos los módulos de nodo, elimínelo package-lock.json. Y luego corre npm install.


2

CONSEJO PRO:

Este error me sucedió, mientras luchaba contra la fatiga y la enfermedad leve, porque escribí en node blahlugar de npm blah.

¡El mensaje de error recibido no estaba lo suficientemente enojado como para alertarme de mi propia locura!


2

Me enfrenté al mismo problema cuando alguien más en el equipo actualizó package.jsonSVN. Simplemente eliminar el node_modulesdirectorio no ayudó. Cómo resolví el problema es:

rm -rf node_modules
rm package.json
rm package-lock.json
svn up
npm install
ng build --env=prod

¡Espero que esto ayude a alguien!


Gracias por el recordatorio. En mi caso, fue package-lock.json volviendo a estropear las cosas, pero después de eliminarlo y node_modules, ejecutar npm installtodo está bien nuevamente.
TaeKwonJoe

66
Si elimina, package.json¿cómo sabe NPM qué instalar?
Michał

1

Puedo agregar un lugar más para verificar; el paquete que intentaba usar era otro de mis propios paquetes que había publicado en un repositorio privado de NPM. Había olvidado configurar la propiedad 'main' en el package.json correctamente. Entonces, el paquete estaba allí en la carpeta node_modules del paquete consumidor, pero estaba obteniendo "no se puede encontrar el módulo". Me tomó unos minutos darme cuenta de mi error. :-(


1

En mi caso, UNMET PEER DEPENDENCY redux@^3.0.0causé este mensaje de error, míralos todos e instala los módulos faltantes nuevamente usando --save

npm install redux --save

1

Eliminar el nodo / npm y luego reinstalar la versión estable (no la última) funcionó para mí.

sudo rm -rf /usr/local/{lib/node{,/.npm,_modules},bin,share/man}/{npm*,node*,man1/node*}

https://nodejs.org/en/download/

1

En Appsome Solutions tuvimos el mismo problema con nuestra configuración de proyecto de mecanografiado y lo agregamos "moduleResolution": "node",en un tsconfig.json lo resolvió.


0

Estaba tratando de publicar mi propio paquete y luego incluirlo en otro proyecto. Tuve ese problema debido a cómo he construido el primer módulo. Estoy usando la exportación ES2015 para crear el módulo, por ejemplo, digamos que el módulo se ve así:

export default function(who = 'world'){
    return `Hello ${who}`;
}

Después de compilar con Babel y antes de ser publicado:

'use strict';

Object.defineProperty(exports, "__esModule", {
    value: true
});

exports.default = function () {
    var who = arguments.length <= 0 || arguments[0] === undefined ? 'world' : arguments[0];


    return 'Hello ' + who;
};

Entonces, después npm install module-namede otro proyecto (ninguno ES2015) tuve que hacer

var hello = require('module-name').default;

Para realmente tener el paquete importado.

¡Espero que ayude!


0

Encontré este problema al usar webpackcon webpack-dev-middleware.

Había convertido un solo archivo en una carpeta .

El observador parecía no ver la nueva carpeta y ahora faltaba el módulo.

Se solucionó reiniciando el proceso.


0

Acabo de encontrar un escenario inusual que puede ser útil para alguien y es una especie de arenque rojo.

También recibí el error No se puede encontrar el módulo, pero extrañamente todo funcionó perfectamente en mi entorno local Node.js (alojado en Mac). Este problema solo apareció cuando el código se implementó en nuestro servidor Linux.

Bueno ... resultó ser un error tipográfico que (aparentemente) la instalación de Node.js basada en Mac estaba perfectamente feliz de ignorar.

La inclusión se veía así:

var S3Uploader = require('./S3Uploader.class');

Pero el archivo real se llamaba "s3Uploader.class.js"

Observe la diferencia de mayúsculas y minúsculas en la 's' vs. 'S' entre el código y el nombre del archivo.

Entonces, en la extraña posibilidad de que ninguna de las otras soluciones aquí resuelvan su problema, ¡verifique tres veces que no esté confundiendo los caracteres en su nombre de archivo incluido! :)

y DUH!


1
Por defecto, el sistema de archivos osx (HFS +) no distingue entre mayúsculas y minúsculas ... descubierto hace poco, sin embargo, es definitivamente configurable
Giulp

0

Tal vez, como yo, configuró 'view engine' en express para un motor que no existe, o trató de usar un motor de plantillas no registrado. Asegúrate de usar: app.engine('engine name',engine) app.set('view engine','engine name')


0

Instale la nueva CLI v3 (npm install -g ionic @ latest).

Si este problema sigue siendo un problema en CLI v3. ¡Gracias!


0

Si el paquete se instaló correctamente, vaya a su carpeta node_modules y luego verifique el archivo y la ruta. Luego importar. Espero que esto ayude.


-3

En primer lugar, sí, una parte de mi respuesta definitivamente es útil para resolver el error que publica OP. En segundo lugar, después de intentar el siguiente paso, me enfrenté a un par de otros errores y, por lo tanto, también escribí la solución de esos errores.

(Psst! No estoy seguro de si he ayudado con éxito a resolver el error anterior, o si he roto alguna regla o formato de respuesta, pero me enfrenté al error anterior y a algunos otros y me llevó mucho tiempo encontrarlo las soluciones adecuadas para esos errores. Estoy escribiendo la solución completa porque, en caso de que alguien más también se enfrente a estos errores, entonces con suerte obtendrá una solución aquí).

Entonces, agregando y elaborando la respuesta proporcionada por PrashanthiDevi , y también agregando mi experiencia personal, aquí está:

Soy nuevo en toda la parte de e2e y pruebas unitarias. Empecé a investigar esta parte desde el transportador . Ahora ya tenía los archivos en los que se escribieron las pruebas, pero tuve que ejecutar las pruebas.

Ya había instalado todos los softwares y herramientas necesarios, pero cuando ejecuté inicialmente el código para ejecutar las pruebas, gulp itestrecibí este error 'No se puede encontrar el módulo' . Después de pasar por muchas preguntas diferentes sobre SO, encontré una respuesta que pensé que podría ayudar a encontrar una solución.

La persona había sugerido ejecutar el comando npm installen mi carpeta de proyecto.

La razón para hacer esto fue actualizar la carpeta de módulos de nodo , dentro de nuestra carpeta de proyecto, con todos los archivos y dependencias necesarios y necesarios.

(La parte a continuación puede ser irrelevante con esta pregunta, pero podría ser útil si alguien se encuentra con la misma situación que enfrenté).

El paso anterior seguramente resolvió mi error anterior, ¡pero arrojó uno nuevo! Esta vez el error esCould not find chromedriver at '..\node_modules\protractor\selenium\chromedriver' .

Sin embargo, la solución de este error fue bastante tonta (y divertida) para mí. Ya tenía el archivo chromedriver en mi carpeta de selenio . Pero, resulta que el error anterior se produjo porque mis archivos de chromedriver estaban dentro de la carpeta de selenio y no dentro de la carpeta de chromedriver . Por lo tanto, ¡crear una carpeta de chromedriver y copiar los archivos de chromedriver allí resolvió mi problema!

Además, para el error: Se agotó el tiempo de espera esperando el Servidor WebDriver , podría agregar esta línea de código al archivo conf.js dentro exports.config{}:

seleniumAddress: 'http://localhost:8080/'

¡Espero que esto ayude!


-4

Obtuve la solución simple para resolver este problema.

Simplemente elimine C: \ Users \ UserName \ AppData \ Roaming \ npm \

y luego instalar el nodo.

Ahora su problema será resuelto.


Él está usando Unix. No Windows
Saif Al Falah el

-4

Ejecute solo el siguiente comando:

npm install

Instalará todos los módulos necesarios en la node_modulescarpeta.


-5
rm -rf node_modules
npm install
npm fund

Ese trabajo para mí.


-38

Cambie el directorio y señale su carpeta de proyecto actual y luego "npm install". .

Esto instalará todas las dependencias y módulos en su carpeta de proyecto.


2
esta respuesta no parece estar equivocada, creo que la votación negativa es el resultado de algunos prejuicios y comentarios sarcásticos de apoyo.
Muqsith el

2
tanto votos negativos es demasiado. No es completamente vago. Se relaciona con la respuesta aceptada. Todo lo que dice la respuesta es hacerlo npm installen el directorio correcto. No hay nada tan negativo al respecto
shinobi el
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.