集中式node_modules

时间:2012-12-13 17:59:17

标签: node.js debian npm node-modules

我希望将我的Node模块存储在一个集中的位置,例如/var/http/common/,让我的应用在不同的位置实时/运行,比如/var/http/www/apps/APP#1_NAME/

我能够在server.js中设置需求以使用require('../../../common/express')之类的相对路径,但是通过NPM的作者阅读posts,听起来我正在攻击它,并且我应该使用npm link为Node创建一个“本地”引用(符合实际安装的符号链接)。

我首先在/var/http/common/中安装了我的节点模块,但是当我尝试创建符号链接(npm link ../../../common/node_modules/express)时,npm似乎将其视为“全局”安装,并重新安装在/usr/local/lib/node_modules/express中表达(并创建了一个“本地”符号链接到它./node_modules/express ->),这不是我预期会发生的。这是我真正想要的吗?我应该先使用npm config set prefix吗?

2 个答案:

答案 0 :(得分:3)

事实证明:在做其他任何事情之前我应该​​设置npm config set prefix

npm linknpm install -g似乎可以做同样的事情;然而,npm link将全局安装模块, node_modules中创建指向$prefix/lib/node_modules/$module的本地符号链接。 MaxGfeller不正确:如果没有该本地符号链接,Node会抱怨它无法找到(全局安装的)模块。这是通过我自己的尝试确定的,也可以从npm help folders推断:

  

•如果您要 require(),请将其本地安装。

     

•如果要在命令行上运行,请将其全局安装。

     

•如果您需要两者,请在两个地方安装,或使用 npm链接

这没有具体解决我的问题:我希望将模块存储在一个中心位置(由多个节点应用程序访问)但我不关心从命令中使用它们 - 我只想要在require('')中使用它们。

至于我在require('')中使用相对路径的问题,我仍然没有得到/找到权威的答案,但从npm link的存在看来,使用rel路径不是作者的意图。对我而言,似乎是six-of-one的情况,但我希望与Node的标准保持一致。

答案 1 :(得分:2)

您可以通过在命令中添加“-g”来全局安装节点模块。例如:

npm install express -g

在您的代码中,您可以正常使用它:

require('express');

然后将模块存储在/ usr / local / lib / node_modules