Error de Node.js: no se puede encontrar el módulo express


145

Escribí mi primera aplicación node.js, pero no puede encontrar la biblioteca express:

C:\ChatServer\Server>node server.js

module.js:340
    throw err;
          ^
Error: Cannot find module 'express'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (C:\ChatServer\Server\server.js:6:9)
    at Object.<anonymous> (C:\ChatServer\Server\server.js:25:4)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)

Pero express está instalado (con -gclave):

C:\ChatServer\Server>npm install -g express
npm http GET https://registry.npmjs.org/express
npm http 304 https://registry.npmjs.org/express
npm http GET https://registry.npmjs.org/connect/2.7.11
npm http GET https://registry.npmjs.org/commander/0.6.1
npm http GET https://registry.npmjs.org/range-parser/0.0.4
npm http GET https://registry.npmjs.org/mkdirp/0.3.4
npm http GET https://registry.npmjs.org/cookie/0.1.0
npm http GET https://registry.npmjs.org/buffer-crc32/0.2.1
npm http GET https://registry.npmjs.org/fresh/0.1.0
npm http GET https://registry.npmjs.org/methods/0.0.1
npm http GET https://registry.npmjs.org/send/0.1.0
npm http GET https://registry.npmjs.org/cookie-signature/1.0.1
npm http GET https://registry.npmjs.org/debug
npm http 304 https://registry.npmjs.org/mkdirp/0.3.4
npm http 304 https://registry.npmjs.org/range-parser/0.0.4
npm http 304 https://registry.npmjs.org/cookie/0.1.0
npm http 304 https://registry.npmjs.org/connect/2.7.11
npm http 304 https://registry.npmjs.org/commander/0.6.1
npm WARN package.json range-parser@0.0.4 No repository field.
npm http 304 https://registry.npmjs.org/buffer-crc32/0.2.1
npm http 304 https://registry.npmjs.org/fresh/0.1.0
npm http 304 https://registry.npmjs.org/methods/0.0.1
npm http 304 https://registry.npmjs.org/send/0.1.0
npm http 304 https://registry.npmjs.org/cookie-signature/1.0.1
npm WARN package.json methods@0.0.1 No repository field.
npm WARN package.json methods@0.0.1 No readme data.
npm WARN package.json fresh@0.1.0 No repository field.
npm WARN package.json send@0.1.0 No repository field.
npm WARN package.json cookie-signature@1.0.1 No repository field.
npm http 304 https://registry.npmjs.org/debug
npm http GET https://registry.npmjs.org/mime/1.2.6
npm http GET https://registry.npmjs.org/qs/0.6.5
npm http GET https://registry.npmjs.org/send/0.1.1
npm http GET https://registry.npmjs.org/formidable/1.0.14
npm http GET https://registry.npmjs.org/cookie/0.0.5
npm http GET https://registry.npmjs.org/bytes/0.2.0
npm http GET https://registry.npmjs.org/pause/0.0.1
npm http 304 https://registry.npmjs.org/mime/1.2.6
npm http 304 https://registry.npmjs.org/bytes/0.2.0
npm WARN package.json bytes@0.2.0 No repository field.
npm http 304 https://registry.npmjs.org/pause/0.0.1
npm WARN package.json pause@0.0.1 No repository field.
npm http 304 https://registry.npmjs.org/formidable/1.0.14
npm http 304 https://registry.npmjs.org/qs/0.6.5
npm http 304 https://registry.npmjs.org/send/0.1.1
npm http 304 https://registry.npmjs.org/cookie/0.0.5
npm http GET https://registry.npmjs.org/mime
npm http 304 https://registry.npmjs.org/mime
C:\Users\Dmitry\AppData\Roaming\npm\express -> C:\Users\Dmitry\AppData\Roaming\npm\node_modules\express\bin\express
npm WARN package.json policyfile@0.0.4 'repositories' (plural) Not supported.
npm WARN package.json Please pick one as the 'repository' field
npm WARN package.json assert-plus@0.1.2 No repository field.
npm WARN package.json ctype@0.5.2 No repository field.
express@3.2.6 C:\Users\Dmitry\AppData\Roaming\npm\node_modules\express
├── methods@0.0.1
├── fresh@0.1.0
├── range-parser@0.0.4
├── cookie-signature@1.0.1
├── buffer-crc32@0.2.1
├── cookie@0.1.0
├── debug@0.7.2
├── commander@0.6.1
├── mkdirp@0.3.4
├── send@0.1.0 (mime@1.2.6)
└── connect@2.7.11 (pause@0.0.1, qs@0.6.5, bytes@0.2.0, cookie@0.0.5, formidable@1.0.14, send@0.1.1)

Alguna información:

C:\ChatServer\Server>npm --version
1.2.24

C:\ChatServer\Server>node --version
v0.10.9

C:\ChatServer\Server>npm --version
1.2.24

C:\ChatServer\Server>npm ls -g installed express
npm WARN package.json cookie-signature@1.0.1 No repository field.
npm WARN package.json fresh@0.1.0 No repository field.
npm WARN package.json methods@0.0.1 No repository field.
npm WARN package.json range-parser@0.0.4 No repository field.
npm WARN package.json send@0.1.0 No repository field.
npm WARN package.json policyfile@0.0.4 'repositories' (plural) Not supported.
npm WARN package.json Please pick one as the 'repository' field
npm WARN package.json bytes@0.2.0 No repository field.
npm WARN package.json pause@0.0.1 No repository field.
npm WARN package.json assert-plus@0.1.2 No repository field.
npm WARN package.json ctype@0.5.2 No repository field.
C:\Users\Dmitry\AppData\Roaming\npm
└── express@3.2.6


C:\ChatServer\Server>npm ls installed express
C:\ChatServer\Server
└── (empty)

¿Como puedó resolver esté problema? (¿ DEBO instalarlo sin -g?)




Respuestas:


275

Debe instalar Express localmente en el contexto de su aplicación ( node_modulescarpeta):

$ npm install express

La razón de esto es que las aplicaciones siempre buscan en su contexto local cualquier dependencia. La instalación global es solo para configurar binarios disponibles en todo el sistema, como corredores de prueba de unidad o bootstrappers o cosas por el estilo.

Con Express, cuando lo instala globalmente, obtiene un expressbinario que puede iniciar una aplicación por usted. Para más información, escriba

$ express --help

Entonces, para responder a su pregunta final: , debe instalarlo sin -g.


1
Esto también me ayudó. Lo había winstoninstalado globalmente, lo que funcionó por alguna razón al iniciar mi aplicación como un usuario normal, pero al iniciar mi aplicación y un script de inicio del sistema no funcionaría. Lo arreglé instalando winston localmente en el directorio de la aplicación (y agregándolo a package.json).
trusktr

3
puede vincular una dependencia global instalada por cd al directorio raíz de su proyecto y luego usar "npm link <algún nombre de dependencia>"
khoi nguyen

11
npm install después de haber creado tu aplicación. Instalará todas las dependencias.

Gracias, esto realmente ayudó. Ir a la carpeta node_modules y luego instalar Express resolvió mi problema
Megha

@Golo Roden Al codificar su respuesta, probé con su solución pero aparece un error: 'npm ERR! tar.unpack untar error C: \ Users \ VV \ AppData \ Roaming \ npm-cache \ express \ 4.14.0 \ package.tgz npm ERR! Windows_NT 6.3.9600 npm ERR! argv "C: \\ Archivos de programa \\ nodejs \\\\ node.exe" "C: \\ Archivos de programa \\ nodejs \\ node_modules \\ npm \\ bin \\ npm-cli.js" "instalar" " express "
VjyV

20

Para mí funcionó cuando se instaló express localmente con la opción --save de la siguiente manera:

$ npm install express --save

12

Compruebe si no está instalando el expressmódulo, use este comando:

 npm install express

y si su node_modulesdirectorio está en otro lugar, establezca la NODE_PATHvariable de entorno:

 set NODE_PATH=your\directory\to\node_modules;%NODE_PATH%

En Windows 10 después de npm install express, no se puede agregar automáticamente a la ruta del nodo, debe agregarle manualmente los módulos de nodo.
Jane

5

Golo ha explicado bien la solución, pero podría agregar una aclaración: a
veces los módulos de nodo están instalados en

/usr/local/lib/node_modules

y cuando se inicia el nodo, se buscan módulos blabla.js en

/lib

Entonces, una solución es crear un enlace simbólico:

sudo ln -s /usr/local/lib/node_modules/ /lib/node_modules

1
manera más fácil -> enlace npm <módulo>
Amit G

4

En su caso, su expressmódulo está instalado en C:\Users\Dmitry\AppData\Roaming\npm\node_modules\express, pero necesita obtener este módulo en el directorio de su proyecto. Por lo que debe copiar el archivo de las expresscarpetas de los módulos C:\Users\Dmitry\AppData\Roaming\npm\node_modules\en el directorio de proyecto como: C:\ChatServer\Server\node_modules. Si no tiene una carpeta llamada 'node_modules' en la carpeta de su proyecto, créela primero y pegue esos archivos en esta carpeta. Este método me funcionó en mi PC con Windows. Reinicie su servidor de nodo y vuelva a ejecutar el nodo de comando C:\ChatServer\Server>node server.js. Debería funcionar ahora !!!!


¡También funcionó en Windows 10!
Victor Michael Kosgei

3

En el sistema operativo basado en Ubuntu puedes probar

sudo apt-get install node-express

me está funcionando en Mint


3

Dado que ha instalado el nodo en su sistema, instale Express localmente para su proyecto usando lo siguiente para Windows:

npm install express

o

npm install express --save

Puede darle acceso global utilizando:

npm install -g express --save

2

Tuve este error en vscode, aunque los módulos estaban instalados. Estoy usando mecanografiado y expreso. En los server.tsarchivos, todas las importaciones tenían subrayados rojos y ondulados. Resulta que tenía un tsconfig.jsonarchivo defectuoso .

{
    "compileOnSave": false,
    "compilerOptions": {
        "module": "commonjs", // Previously this value was `es6`
        "target": "es6",
        "allowSyntheticDefaultImports": true,
        "baseUrl": "public",
        "sourceMap": true,
        "outDir": "dist",
        "jsx": "react",
        "strict": true,
        "preserveConstEnums": true,
        "removeComments": true,
        "noImplicitAny": true,
        "allowJs": true
    },
    "exclude": [
        "node_modules",
        "build"
    ]
}

1

cree una carpeta en su disco duro, por ejemplo, sample1 y vaya al símbolo del sistema, escriba: cd y proporcione la ruta de la carpeta sample1 y luego instale todos los módulos ...

npm install express

npm install jade

npm install socket.io

y luego lo que sea que esté creando, guardar la aplicación en la carpeta sample1

intentalo...


1

vaya a su directorio de aplicaciones e instale el módulo express usando el siguiente comando npm install express --save y luego enumere todos los módulos de instalación usando el siguiente comando npm ls verá todos los módulos de instalación local.


1

instalar express globalmente no funcionará en su proyecto local, por lo que debe instalarlo localmente para su uso.

npm install express

Espero que esto funcione

Gracias


0

Llegué al mismo problema. Tenía Express instalado globalmente en / usr / local / bin /. Cuando hago 'npm install', express no se creó en node_modules del directorio local.

  1. Compruebe si tiene el nombre de archivo .npmrc en su $ HOME
  2. Si tiene 'global = true', cambie a 'global = false'
  3. Ahora haga 'npm install' en el directorio de la aplicación. Lo más probable es que deba instalar todos los módulos dependientes del paquete en node_modules (local) dentro del directorio de la aplicación.

0
  • nodo de desinstalación sudo brew
  • actualización de preparación
  • actualizar cerveza
  • limpieza de cerveza
  • brew install node
  • sudo chown -R $ (whoami) / usr / local
  • enlace de preparación - sobreescribir nodo
  • sudo brew postinstall node

Esto funcionó para mí en MacOS X Sierra


0

No estoy orgulloso de compartir esto, pero en mi caso tuve:

 require('express.handlebars')

 //and the correct form is:
 require('express-handlebars'); //Use dash instead.

0

Tuve el mismo error siguiendo el ejemplo en este libro: "Kubernetes Up & Running".
Veo muchas respuestas que sugieren instalar express "a mano", pero no estoy convencido de que sea la mejor solución.
Debido a que estamos usando package.json (puedo verlo en los registros) y la forma correcta de compilar la aplicación se está ejecutando npm install, agregué la dependencia expresa en el archivo package.json .

 "dependencies": {
    "express": "^4.17.1"
}

Tengo la versión actual con npm search express.

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.