Node.js:以编程方式设置NODE_PATH

时间:2014-01-26 02:42:59

标签: node.js

我想在Node.js中动态加载文件,这就产生了一个问题,即Node在调用模块的node_modules中查找而不是查看正在加载的文件的node_modules

我不想使用require()的原因是因为这些是插件,它们可以通过简单连接而包含在主应用程序中。因此,使用require()会破坏插件。它们必须直接加载到主应用程序上下文中,但它们也必须能够访问其本地node_modules

我使用vm.runInNewContext()来评估代码。但是如何将NODE_PATH传递给runInNewContext()

2 个答案:

答案 0 :(得分:22)

要以编程方式设置NODE_PATH,您可以在根节点文件(http://cran.us.r-project.org)之上运行此魔术:

process.env.NODE_PATH = "your/path";
require("module").Module._initPaths();

但升级节点时请保持眼睛剥落,以免改变其工作方式。

答案 1 :(得分:0)

由于vm.runInNewContext()不了解您当前的上下文,也没有给出自己新的“全局”上下文,我认为以下内容可行:

var sb = { process: { env: { NODE_PATH: '/my/path/' }}};
vm.runInNewContext('process.env', sb);
// return: { NODE_PATH: '/my/path/' }

除非我遗漏了什么。如果我能告诉您更详细的信息吗?