Nodejs não consegue encontrar o módulo
-
21-12-2019 - |
Pergunta
Estou recebendo um erro ao tentar usar qualquer módulo global, exemplo:
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:362:17)
at require (module.js:378:17)
at Object.<anonymous> (C:\BitNami\wappstack\...\test\app.js)
at Module._compile (module.js:449:26)
at Object.Module._extensions..js (module.js:467:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.runMain (module.js:492:10)
Eu instalei o comando expresso:
npm install -g express
Meu aplicativo.js:
var express = require('express');
E execute-o usando o Windows PowerShell ou o prompt de comando node.js:
node app.js
realmente não sei o que está acontecendo de errado, li algo sobre variáveis de ambiente no Windows, pode ser isso?
Resolvido/Atualização
O problema era:As variáveis de ambiente do Windows não foram configuradas para a pasta npm.Procure sua pasta npm e adicione o caminho nas variáveis de ambiente.
Solução
Você deve instalar o Express localmente:
npm install express
Em seguida, exija como você fez:
var express = require('express')
Outras dicas
Apenas para citar aqui:
https://www.npmjs.org/doc/files/npm-folders.html
- Instale-o localmente se você vai exigir() isso.
- Instale-o globalmente se você for executá-lo na linha de comando.
- Se você precisar de ambos, instale-os em ambos os lugares ou use link npm.
Eu estava recebendo o mesmo erro no Windows7/x64 e adicionar o seguinte na variável de ambiente resolveu o problema:
NODE_PATH=C:\Users\[USERNAME]\AppData\Roaming\npm\node_modules
*Substitua [NOME DE USUÁRIO] pelo seu nome de usuário real do sistema
Estou trabalhando em Linux, mas quando preciso do express, estou fazendo isso com um caminho relativo para onde ele está instalado e funciona bem:
var express = require('./public/node_modules/express');
Tenho certeza de que a mesma coisa funcionaria com um caminho do Windows também.Se você quiser ser mais explícito e declarar um caminho absoluto, essa seria a opção nuclear para garantir que você sempre saiba exatamente de onde seu módulo está sendo carregado, independentemente de onde seus scripts estão sendo executados.
Se você ainda tiver problemas depois de usar um caminho explícito, não sei qual pode ser o problema...
outra opção será executar npm install --save express