2014-01-26 25 views
7

我想在Node.js中動態加載文件,這會產生一個問題,即Node在調用模塊的node_modules中查找,而不是查看正在加載的文件的node_modulesNode.js:以編程方式設置NODE_PATH

我不想使用require()的原因是因爲這些是插件,只需串接即可將它們包含在主應用程序中。所以使用require()打破了插件。他們必須直接加載到主應用程序上下文中,但他們也必須有權訪問其本地的node_modules。我使用vm.runInNewContext()來評估代碼。但是,我如何通過NODE_PATHrunInNewContext()

回答

0

由於vm.runInNewContext()沒有關於您的當前環境的知識,也不是給自己的新的「全球性」方面,我認爲以下將工作:

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

除非我失去了一些東西。如果我能更詳細地解釋一下嗎?

11

要設置NODE_PATH編程,您可以在根節點文件(source)上運行這個魔法:

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

但保持你的眼睛去皮,當你免得他們改變它是如何工作升級的節點。

+1

如果有人試圖使用NODE_PATH並且它不起作用,請確保您的第二行使用_initPaths()調用。 – Sean