我希望将我的 Node 模块存储在一个集中的位置,例如 /var/http/common/
并让我的应用程序在不同的位置运行/运行,例如 /var/http/www/apps/APP#1_NAME/
。
我能够在 server.js
中设置 require 来使用像 require('../../../common/express')
这样的相对路径>,但来自阅读posts NPM 的作者,这听起来像是我在破解它,我应该使用 npm link
为 Node 创建一个“本地”引用(它指向实际安装的符号链接(symbolic link))。
我首先在 /var/http/common/
中安装了我的 Node 模块,但是当我尝试创建符号链接(symbolic link)时 (npm link ../../../common/node_modules/express
),npm 似乎将其视为“全局”安装,并在 /usr/local/lib/node_modules/express
中重新安装了 express(并创建了一个它的“本地”符号链接(symbolic link) ./node_modules/express ->
) 这不是我所期望的。这是我真正想要的吗?我应该先使用 npm config set prefix
吗?
最佳答案
事实证明:我应该在做任何其他事情之前设置 npm config set prefix
。
看起来 npm link
和 npm install -g
做同样的事情;然而,npm link
将全局安装模块,它也在 node_modules
中创建一个指向 $prefix/lib 的本地符号链接(symbolic link)/node_modules/$module
. MaxGfeller不正确:如果没有本地符号链接(symbolic link),Node 会提示找不到(全局安装的)模块。这是通过我自己的尝试确定的,也是从 npm help folders
中推断出来的:
• Install it locally if you're going to require() it.
• Install it globally if you're going to run it on the command line.
• If you need both, then install it in both places, or use npm link.
这并没有具体解决我的问题:我想将模块存储在一个中央位置(以供多个 Node 应用程序访问),但我不关心从命令中使用它们——我只想要在 require('')
中使用它们。
至于我关于在 require('')
中使用相对路径的问题,我仍然没有得到/找到权威的答案,但从 npm 的存在来看似乎link
使用 rel 路径不是作者的意图。对我来说,这似乎是一个案例 six-of-one , 但我想与 Node 的标准保持一致。
关于node.js - 集中式 node_modules,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13865671/