2016-10-02 30 views
0

我需要main.js(在運行腳本)的函數的模塊的範圍要被識別:添加功能到外部模塊中的NodeJS

Modules.js:

function x(){ 
    functionNeeded(); 
} 

module.export.x = x; 

Main.js

var m = require("modules.js"); 

function functionNeeded(){ 
    //function needed to call 
} 

//m.x() is called successfully 
//but fails because functionNeeded is not defined (check modules.js) 
//with m.functionNeeded = functionNeeded before calling m.x() it also fails. 

有沒有人對這個如何實現這樣我可以傳播本功能的任何想法main.js跨幾個模塊的離子,而不復制或傳播到整個模塊?

+0

爲什麼不把它放在它自己的模塊中,並且需要它在你需要的地方。另一種選擇是將它作爲參數傳遞。 – adeneo

+0

不改變module.js,你不能這樣做。 module.js在它自己的範圍內運行,並且你不能從module.js之外改變這個範圍(除了弄壞全局變量之外,這絕對不是一個好主意)。當然,您可以編輯module.js以多種方式解決此問題(最靈活的方法是將'functionNeeded()'放在它自己的module中,module.js可以'require()'或者可以傳遞它in'x()'作爲回調 – jfriend00

回答

0

我真的不推薦這,但你global可用在你的節點:

global.functionNeeded = function() { 
}; 

...但:

  • 你必須確保你的初始化任何引用該函數之前運行。
  • 這使得你的代碼很難推理;它沒有明確說明函數來自何處或何時可用。

這是最好只require你的每一個功能依賴於它模塊中。

+0

如果我調用幾個模塊,每個模塊都有自己的require,那麼是否存在遞歸要求的問題? – Fane

+0

否; nodejs有模塊緩存;模塊只會在第一次它是必需的,然後存儲在緩存中;之後,當需要相同的模塊時,您將返回對同一個模塊對象的引用。 – Jacob

1

您可以將它作爲參數提供的功能模塊:

Module.js:

function x(functionNeeded){ 
    functionNeeded(); 
} 

module.export.x = x; 

Main.js

var m = require("modules.js"); 

function functionNeeded(){ 
    //function needed to call 
} 

m.x(functionNeeded)