我希望将我的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
吗?
答案 0 :(得分:3)
事实证明:在做其他任何事情之前我应该设置npm config set prefix
。
npm link
和npm 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
中