[英]Centralised node_modules
我想将我的Node模块存储在一个集中的位置,例如/var/http/common/
并让我的应用程序在其他位置运行/运行,例如/var/http/www/apps/APP#1_NAME/
。
我能够在server.js
设置require('../../../common/express')
以使用诸如require('../../../common/express')
类的相对路径,但是从阅读NPM作者的帖子时 ,听起来好像我在黑客我应该使用npm link
为Node创建一个“本地”引用(符号链接到实际安装)。
我首先在/var/http/common/
安装了我的节点模块,但是当我尝试创建符号链接( npm link ../../../common/node_modules/express
)时,npm似乎将其视为一个“全局”安装,然后在/usr/local/lib/node_modules/express
重新安装了express(并创建了一个到它的“本地”符号链接./node_modules/express ->
),这不是我期望的。 这是我真正想要的吗? 我应该首先使用npm config set prefix
吗?
原来:在执行其他操作之前,我应该已经设置了npm config set prefix
。
看起来npm link
和npm install -g
做同样的事情。 但是,尽管npm link
将在全局安装模块,但它还会在node_modules
中node_modules
指向$prefix/lib/node_modules/$module
的本地符号链接。 MaxGfeller不正确:如果没有该本地符号链接,Node将抱怨它找不到(全局安装的)模块。 这是通过我自己的尝试确定的,也可以从npm help folders
推论得出:
•如果需要require() ,请在本地安装。
•如果要在命令行上运行它,请全局安装它。
•如果两者都需要,则将其安装在两个地方,或使用npm link 。
这并没有专门解决我的要求:我想将模块存储在一个中央位置(以供多个节点应用程序访问),但是我不关心从以下命令中使用它们,我只想使用它们在require('')
。
至于我关于在require('')
使用相对路径的问题,我仍然没有得到/找到一个权威的答案,但是从npm link
的存在看来,使用rel路径并不是作者的意图。 对我来说,这似乎是的情况下六中一 ,但我想保持与节点的标准是一致的。
您可以通过在命令中添加“ -g”来全局安装节点模块。 例如:
npm install express -g
在您的代码中,您可以正常使用它:
require('express');
然后将模块存储在/ usr / local / lib / node_modules中
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.