我在/libs
个文件夹中有多个NodeJS文件,例如:
math.js
,restapi.js
,auth.js
,push.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 :(得分: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());
如果有效或失败,请告诉我。