Node.js:以编程方式设置NODE_PATH
我想在Node.js中dynamic地加载文件,这就产生了一个问题:Node在调用模块的node_modules
中查找,而不是查看被加载的文件的node_modules
。
我不想使用require()
的原因是因为这些是插件,只要串联就可以将它们包含在主应用程序中。 所以使用require()
打破插件。 它们必须直接加载到主应用程序上下文中,但它们也必须能够访问其本地node_modules
。
我使用vm.runInNewContext()
来评估代码。 但是,如何将NODE_PATH
传递给runInNewContext()
?
要以编程方式设置NODE_PATH
,可以在根节点文件( 源 )之上运行这个魔术:
process.env.NODE_PATH = "your/path"; require("module").Module._initPaths();
但是,当你升级你的节点,以免改变它的工作方式时,请保持你的眼睛去皮。
由于vm.runInNewContext()
不了解您当前的上下文,也没有给出它自己的新的“全局”上下文,所以我认为以下方法是可行的:
var sb = { process: { env: { NODE_PATH: '/my/path/' }}}; vm.runInNewContext('process.env', sb); // return: { NODE_PATH: '/my/path/' }
除非我失去了一些东西。 如果我能更详细地解释一下吗?