2016-09-23 47 views
0

我有一個/libs文件夾多的NodeJS文件,例如:避免的NodeJS模塊「需要」複製

math.jsrestapi.jsauth.jspush.js

math.js是提供基本的數學功能和所有類restapi.js,auth.js,push.js需要math.js

的問題是,我在所有其他類這麼多require './math.js,例如:

// In auth.js 
    var Auth = new function __Auth(){ 
     function A(){ 
      var math = require "./math.js"; 
      return math.fooA(); 
     } 

     function B(){ 
      var math = require "./math.js"; 
      return math.fooB(); 
     } 
    } 

    exports = module.exports = Auth; 

app.js(主應用程序)

var math= require('./math.js'); 
math.getConfig('config.json'); 

var auth= require('./auth.js'); 
console.log(auth.fooA()); 

app.js,基類math.js絕首先調用getConfig()來從配置文件初始化必要的變量和常量。 (因此,我想只保留math.js的一個實例,因爲它是默認的NodeJS行爲,所以它可以)。

(注意,這只是一個簡化實際代碼庫的例子)。

我知道NodeJS有一個require緩存機制,但這是否意味着每個函數調用有一個require math.js是唯一的方法?我認爲這是非常昂貴和非最佳的。

在其他語言(例如PHP)中,頂部可能有一個require,並且沒有require用於每個函數引用同一個類。

任何建議更好& 更高效代碼設計?

PS。我剛剛編輯了一些問題來澄清情況。

+0

似乎像循環依賴問題或類似的東西。我們需要看到'math.js'來給出一個很好的答案。 – tcooc

回答

1

auth.js

var math = require ('./math.js'); 

function A(){ 
    return math.fooA(); 
} 

function B(){ 
    return math.fooB(); 
} 

function C(){ 
    return math.fooC(); 
} 
+0

我編輯了問題以正確描述結果。問題在於,在主應用程序中,'math.js'必須調用'getConfig()',並在類的開頭按照require math.js''的方法,它會返回一個錯誤。 – hiro

+0

@hiro我懷疑它只是說「一個錯誤」。 – str

+0

'var Auth = new function __Auth(){ var math = require('./ math.js'); this.A = function(){return math.fooA();}; //錯誤,數學未定義 } exports = module.exports = Auth;' – hiro

0

您可以在文件的頂部導入模塊。沒有必要將它包含在每個函數中。並且不要害怕,這種方法並不代表糟糕的代碼風格。 此外,將當前模塊使用的文件頂部的所有庫導入也是一種很好的做法。

0

在app.js上啓動您的數學計算,並要求包含數學參數的auth。

// In auth.js 
function __Auth(math){ 
    function A(){ 
     return math.fooA(); 
    } 

    function B(){ 
     return math.fooB(); 
    } 
} 

exports = module.exports = function (math) { 
    return new __Auth(math); 
}; 

您auth.js將使用例如數學從app.js發起

// In app.js 
var math= require('./math.js'); 
math.getConfig('config.json'); 

var auth= require('./auth.js')(math); 
console.log(auth.fooA()); 

請讓我知道,如果它工作或失敗。