我是否需要在每个项目目录中安装express?

时间:2014-07-03 19:53:33

标签: node.js express

我有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

我最终在本地安装,在阅读了快速本地安装和全局安装的优缺点后,如果我在本地安装快递可能会更好。一旦我在本地安装,它就会成功运行。

3 个答案:

答案 0 :(得分:3)

节点模块查找算法如下所示(来自Node.js in Action):

enter image description here

因此,如果您在项目根目录的node_modules中安装了模块,则可以在每个子目录和文件中找到该模块。正如您在图的最后一点所看到的,您可以通过设置NODE_MODULES环境变量来指定搜索目录。全局安装express时,它可能位于/usr/local/bin/express之类的位置。您可以使用

启动应用程序时设置NODE_MODULES目录
NODE_MODULES=/usr/local/bin/ node app.js

答案 1 :(得分:0)

正如您所猜测的那样,确实可以解决您的问题。

您需要全球安装快递。这不是运行npm install express而是运行:

sudo npm install -g express

  • 需要sudo才能获得对全球位置的写入权限。
  • 标志-g代表全局安装。您可以在任何模块上使用它。

虽然这不是灵丹妙药,但有些项目可能需要非常具体的版本,因此单一安装不是一种选择。对于此类项目,您仍需要在本地为项目安装快速。但在您的情况下,我认为进行全局安装就足够了。

答案 2 :(得分:0)

节点在目录层次结构中向上搜索包。

荒谬的答案就是这样做

# cd /
# npm install express

那将设置/ node_modules ...