Erro no Node.js: Não foi possível encontrar o módulo express

145

Eu escrevi meu primeiro aplicativo node.js, mas ele não consegue encontrar a biblioteca expressa:

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)

Mas express é instalado (com -gchave):

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)

Alguma informação:

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 posso resolver este problema? ( DEVO instalá-lo sem -g?)

Dmitry
fonte

Respostas:

275

Você precisa instalar o Express localmente no contexto do seu aplicativo ( node_modulespasta):

$ npm install express

A razão para isso é que os aplicativos sempre procuram em seu contexto local quaisquer dependências. A instalação global é apenas para configurar binários disponíveis em todo o sistema, como executores de teste de unidade ou bootstrappers ou coisas assim.

Com o Express, quando você o instala globalmente, você obtém um expressbinário que pode inicializar um aplicativo para você. Para mais informações, digite

$ express --help

Portanto, para responder à sua pergunta final: SIM , você precisa instalá-lo sem -g.

Golo Roden
fonte
1
Isso me ajudou também. Eu tinha winstoninstalado globalmente, o que funcionou por algum motivo ao iniciar o aplicativo como um usuário normal, mas ao iniciar o aplicativo e um script de inicialização do sistema, ele não funcionou. Corrigi-o instalando o winston localmente no diretório do aplicativo (e adicionando-o ao package.json).
trusktr
3
você pode vincular uma dependência global instalada por cd ao diretório raiz do projeto e usar "npm link <some dependency name>"
khoi nguyen
11
instalação do npm depois de criar seu aplicativo. Ele instalará todas as dependências.
Graças a isso realmente ajudou. Indo para node_modules pasta e que a instalação expressa resolveu o meu problema
Megha
@Golo Roden Codificando sua resposta, tentei com sua solução, mas está lançando um erro: 'npm ERR! tar.unpack erro untar C: \ Usuários \ VV \ AppData \ Roaming \ npm-cache \ express \ 4.14.0 \ package.tgz npm ERR! ERRO do Windows_NT 6.3.9600 npm! argv "C: \ Arquivos de programas \\ nodejs \\\\ node.exe" "C: \ Arquivos de programas \\ nodejs \\ node_modules \\ npm \\ bin \\ npm-cli.js" "install" " express "
VjyV 10/10
20

Para mim, funcionou quando instalado expresso localmente com a opção --save da seguinte forma:

$ npm install express --save
Mustafamg
fonte
12

Verifique se você não é um expressmódulo de instalação , use este comando:

 npm install express

e se seu node_modulesdiretório estiver em outro local, defina a NODE_PATHvariável de ambiente:

 set NODE_PATH=your\directory\to\node_modules;%NODE_PATH%
Reza Ebrahimi
fonte
No Windows 10 após o npm install express, ele não pode ser adicionado automaticamente ao caminho do nó, você precisa adicionar manualmente os módulos do nó a ele.
Jane
5

O Golo explicou bem a solução, mas posso acrescentar um esclarecimento:
às vezes os módulos do nó são instalados no

/usr/local/lib/node_modules

e quando você inicia o nó blabla.js, os módulos são pesquisados ​​em

/lib

Portanto, uma solução é criar um link simbólico:

sudo ln -s /usr/local/lib/node_modules/ /lib/node_modules
Luca Davanzo
fonte
1
maneira mais fácil -> npm link <module>
Amit G
4

No seu caso, seu expressmódulo está instalado em C:\Users\Dmitry\AppData\Roaming\npm\node_modules\express, mas você precisa colocá-lo no diretório do projeto. Portanto, você deve copiar o arquivo das expresspastas do módulo de C:\Users\Dmitry\AppData\Roaming\npm\node_modules\para o diretório do projeto como: C:\ChatServer\Server\node_modules. Se você não possui uma pasta chamada 'node_modules' na pasta do projeto, crie-a primeiro e cole esses arquivos nessa pasta. Este método funcionou para mim no meu pc windows. Reinicie o servidor do nó e execute novamente o nó do comando C:\ChatServer\Server>node server.js. Deve funcionar agora !!!!

Rahul Gupta
fonte
Trabalhou no windows 10 também!
Victor Michael Kosgei
3

No sistema operacional baseado no Ubuntu, você pode tentar

sudo apt-get install node-express

está trabalhando para mim no Mint

Nickolay Savchenko
fonte
3

Como você instalou o no seu sistema, instale o Express localmente para o seu projeto usando o seguinte no Windows:

npm install express

ou

npm install express --save

Você pode conceder acesso global usando:

npm install -g express --save
Krishna Ganeriwal
fonte
2

Eu tive esse erro no vscode, embora os módulos estejam instalados. Estou usando texto datilografado e expresso. Nos server.tsarquivos, todas as importações tinham sublinhados vermelhos e ondulados. Acontece que eu tinha um tsconfig.jsonarquivo com defeito .

{
    "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"
    ]
}
Adrian Moisa
fonte
1

crie uma pasta no seu disco rígido, por exemplo, sample1 e vá para o prompt de comando, digite: cd e forneça o caminho da pasta sample1 e, em seguida, instale todos os módulos ...

npm install express

npm install jade

npm install socket.io

e então o que você estiver criando, salve na pasta sample1

tente...

Dev
fonte
1

acesse o diretório do aplicativo e instale o módulo express usando o comando abaixo npm install express --save e liste o módulo all install usando o comando abaixo npm ls, você verá todos os módulos de instalação local.

Anayatullah Khan
fonte
1

a instalação do express globalmente não funcionará no seu projeto local; portanto, é necessário instalá-lo localmente para uso.

npm install express

Espero que isso funcione

Obrigado

MD SHAYON
fonte
0

Eu bati o mesmo problema. Eu tinha o express instalado globalmente em / usr / local / bin /. Quando eu instalo o 'npm', o express não foi criado no node_modules do diretório local.

  1. Verifique se você tem o nome de arquivo .npmrc em seu $ HOME
  2. Se tiver 'global = true', altere para 'global = false'
  3. Agora faça 'npm install' no diretório do aplicativo. Provavelmente, você deve ter todos os módulos dependentes de pacote instalados em node_modules (local) no diretório do aplicativo.
user2512153
fonte
0
  • nó de desinstalação do sudo brew
  • atualização de fermentação
  • atualização de fermentação
  • limpeza de cerveja
  • nó de instalação de distribuição
  • sudo chown -R $ (whoami) / usr / local
  • link de fabricação - nó sobrescrito
  • nó de pós-instalação do sudo brew

Isso funcionou para mim no MacOS X Sierra

Durul Dalkanat
fonte
0

Não tenho orgulho de compartilhar isso, mas no meu caso eu tinha:

 require('express.handlebars')

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

Eu tive o mesmo erro seguindo o exemplo deste livro: "Kubernetes Up & Running".
Vejo muitas respostas sugerindo a instalação expressa "à mão", mas não estou convencido de que é a melhor solução.
Como estamos usando o package.json (posso vê-lo nos logs) e a maneira correta de criar o aplicativo está sendo executada npm install, adicionei a dependência expressa no arquivo package.json .

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

Eu recebo a versão atual com npm search express.

Alex 75
fonte