我有centOS:当我尝试运行需要express的node.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> (/var/www/tipsterPro/index.js:2:15)
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)
at Function.Module.runMain (module.js:497:10)
我确认express位于node_modules目录中:
root@myServer [/usr/local/lib/node_modules]# ls
./ ../ express/ express-generator/ forever/ n/ npm/ pm2/ supervisor/
我发现了一些帖子,声称要在node.js项目的顶层目录中安装express。有没有办法在我拥有的每个项目中都不需要安装快递?应该有一种方法可以将它指向安装目录。
附加信息:
我在全球安装了节点和快递。
我还使用npm install -g express-generator
安装了快速发生器。
BTW:节点模块安装在此位置(不确定是否正确):/usr/local/lib/node_modules
我最终在本地安装,在阅读了快速本地安装和全局安装的优缺点后,如果我在本地安装快递可能会更好。一旦我在本地安装,它就会成功运行。
答案 0 :(得分:3)
节点模块查找算法如下所示(来自Node.js in Action):
因此,如果您在项目根目录的node_modules中安装了模块,则可以在每个子目录和文件中找到该模块。正如您在图的最后一点所看到的,您可以通过设置NODE_MODULES环境变量来指定搜索目录。全局安装express时,它可能位于/usr/local/bin/express
之类的位置。您可以使用
NODE_MODULES=/usr/local/bin/ node app.js
答案 1 :(得分:0)
正如您所猜测的那样,确实可以解决您的问题。
您需要全球安装快递。这不是运行npm install express
而是运行:
sudo npm install -g express
-g
代表全局安装。您可以在任何模块上使用它。虽然这不是灵丹妙药,但有些项目可能需要非常具体的版本,因此单一安装不是一种选择。对于此类项目,您仍需要在本地为项目安装快速。但在您的情况下,我认为进行全局安装就足够了。
答案 2 :(得分:0)
节点在目录层次结构中向上搜索包。
荒谬的答案就是这样做
# cd /
# npm install express
那将设置/ node_modules ...