集中式的node_modules

我想我的节点模块存储在一个集中的地方,比如/var/http/common/ ,让我的应用在不同的位置运行/运行,比如/var/http/www/apps/APP#1_NAME/

我能够在server.js设置require('../../../common/express')来使用像require('../../../common/express')这样的相对path,但是从NPM的作者的阅读post来看,这听起来像是黑客攻击它,我应该使用npm link创build一个“本地”参考节点(这符号链接到真正的安装)。

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

事实certificate:在做任何事情之前,我应该设置npm config set prefix

可能会出现npm linknpm install -g做同样的事情; 然而, npm link将全局安装该模块,同时还会node_modules创build一个指向$prefix/lib/node_modules/$module的本地符号链接。 MaxGfeller是不正确的:没有这个本地符号链接,节点会抱怨,它找不到(全局安装)模块。 这是通过我自己的尝试以及从npm help folders推断出来的:

•如果您要求() ,则在本地安装。

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

•如果两者都需要,请在两处安装,或使用npm链接

这并没有具体解决我所问的问题:我希望将模块存储在一个中央位置(可以由多个节点应用程序访问),但是我不关心如何使用它们 – 我只想使用它们在require('')

至于我在require('')使用相对path的问题,我还没有find一个权威的答案,但从npm link看来,使用relpath并不是作者的意图。 对我来说,这似乎是一个六合一的情况,但我想保持与Node的标准一致。

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

 npm install express -g 

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

 require('express'); 

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