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

Mar*_*tin 13 node.js

我想在Node.js中动态加载文件,这会造成Node查看node_modules调用模块而不是查看node_modules正在加载的文件的问题.

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

vm.runInNewContext()用来评估代码.但是我怎么传递NODE_PATHrunInNewContext()

dwe*_*lle 25

要以NODE_PATH编程方式设置,您可以在根节点文件()之上运行此魔术:

process.env.NODE_PATH = "your/path";
require("module").Module._initPaths();
Run Code Online (Sandbox Code Playgroud)

但是在升级节点时请保持眼睛剥落,以免它们改变它的工作方式.

  • 如果有人试图使用NODE_PATH并且它不起作用,请确保在第二行使用`_initPaths()`调用. (2认同)

Tre*_*ris 1

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

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

除非我错过了什么。如果我是你能更详细地解释一下吗?