避免NodeJS模块“需要”重复

时间:2016-09-23 03:24:03

标签: node.js require

我在/libs个文件夹中有多个NodeJS文件,例如:

math.jsrestapi.jsauth.jspush.js

math.js是提供基本数学功能的类,而所有restapi.jsauth.jspush.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。我刚刚编辑了一下这个问题,以澄清情况。

3 个答案:

答案 0 :(得分:1)

auth.js

string

答案 1 :(得分:0)

您可以在文件顶部导入模块。没有必要将它包含在每个功能中。并且不要害怕,这种做法并不代表糟糕的代码风格。 在当前模块使用的文件顶部导入所有库也是一种很好的做法。

答案 2 :(得分: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());

如果有效或失败,请告诉我。