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/' } 

除非我失去了一些东西。 如果我能更详细地解释一下吗?