6

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

我能够设置server.js使用相对路径的要求require('../../../common/express'),但从阅读NPM 作者的帖子,听起来我正在破解它,我应该使用npm link为 Node 创建一个“本地”引用(符号链接到实际安装)。

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

4

2 回答 2

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 link

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

至于我关于require('')npm link. 对我来说,这似乎是一个六合一的情况但我想与 Node 的标准保持一致。

于 2012-12-18T23:23:51.693 回答
2

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

npm install express -g

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

require('express');

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

于 2012-12-13T20:32:19.517 回答