與你在做什麼的問題是,你導入後設置變量,但設置你的變量之前,當模塊是進口this.myvariable === 'test';
被調用。
您可以讓您的模塊導出一個函數,然後在導入時調用該函數,並將您的變量作爲參數傳遞。
module.exports = function(myVar) {
var myModule = {
// has access to myVar
...
};
return myModule;
};
導入時,
var myModule = require('myModule')(myVar);
如果您使用此方法,請記住,你得到你的模塊的不同實例,無論你輸入你想要的東西可能不是。
如果你想從模塊外部設置模塊的值,一個好的選擇是讓你的模塊用setter方法導出一個對象,並用它來設置變量的值作爲對象的一個屬性。這更清楚地表明你希望這個值是可以設置的,而只是在做myModule.myVar =
會讓你後來感到困惑。
module.exports = {
myVar: null,
setMyVar: function(myVar) {
this.myVar = myVar;
},
...
};
在這種情況下,您正在訪問導入模型的同一實例。
編輯迴應評論
在第一個選項告訴你,你得到了不同的情況下,每個 時間,我怎麼可以導出每個份額多種功能相同 myVar的?如果該模塊導出每個需要myVar的5個函數,我可以在一個位置將它設置爲像導入時一樣,而不是將它傳遞到每個函數的 ?
不能完全確定,如果我理解你所描述的東西,但你可以做這樣的事情:
module.exports = function(myVar) {
var modules = {};
modules.someModule = {...};
modules.anotherModule = {...};
...
return modules;
};
每個子模塊都可以訪問相同的myVar的。所以你可以像上面那樣導入,結果將是一個包含你的五個模塊中的每一個作爲屬性的對象。我不能說這是否是一個好主意,它變得相當複雜,但也許這對您的情況有意義。
想想它發生的順序,然後你會意識到發生了什麼。 – 2015-02-07 09:39:14