我的模块mymodule
有一些配置foo
,bar
和两个函数f1
,f2
。
我想在其中一个客户端中使用默认值初始化此模块,并在另一个客户端中传递其他一些默认值。
这样的事情:
// mymodule.js
let conf = {}
function f1(opts = {}) {
let a = conf.foo
let b = opts.baz
// do something with a and b
}
function1 f2(opts = {}) {
let c = conf.bar
let d = opts.qux
// something with c and d
}
modul.exports = function(defaults = {foo:'foo', bar:'bar'}) {
conf = defaults
return {
f1,
f2
}
}
// client1.js
const mymodule = require('./mymodule')();
...
mymodule.f1();
mymodule.f2();
// client2.js
const mymodule = require('./mymodule')({
foo:'leFoo',
bar:'leBar'
});
...
mymodule.f1();
mymodule.f2();
问题当然是,如果我这样做,当我使用client2时,我会覆盖来自client1的conf。
我怎样才能做到这一点?
答案 0 :(得分:3)
有很多方法可以达到这个目的,但是最接近你已经得到的方法是将整个模块包装在一个函数中:
modul.exports = function(defaults = {foo:'foo', bar:'bar'}) {
let conf = defaults
function f1(opts = {}) {
let a = conf.foo
let b = opts.baz
// do something with a and b
}
function1 f2(opts = {}) {
let c = conf.bar
let d = opts.qux
// something with c and d
}
return {
f1,
f2
}
}
现在每个调用者都有一个私有配置的模块版本。