将可选参数传递给 require()
pass optional parameters to require()
所以,我有这个问题 - 当我遇到 JavaScript 或节点问题时,不可避免地是我的编码问题 ;)
所以冒着被嘲笑的风险,这就是问题所在:
我有一个模块有一个可选的配置参数
使用标准模式,这是我的:
module.exports = function(opts){
return {
// module instance
};
}
在调用代码中有这个
var foo = require('bar')({option: value})
如果没有要传递的选项,代码如下所示
var foo = require('bar')({})
哪个有点丑
所以,我想这样做
var foo = require('bar')
这不起作用,因为导出是一个函数调用
那么,进入正题
a) 有什么方法可以实现这个崇高的目标吗?
b) 是否有更好的向模块传递参数的模式?
非常感谢 - 我希望一旦笑声过去,您将能够向我提供一些帮助:)
tldr:坚持 require('foo')('bar');
无法将其他参数传递给 require
。这是 source code,请注意它只需要一个参数:
Module.prototype.require = function(path) {
assert(util.isString(path), 'path must be a string');
assert(path, 'missing path');
return Module._load(path, this);
};
如果你真的真的很想避免()()
,你可以尝试这样的事情:
b.js
'use strict';
module.exports = {
x: 'default',
configure: function (x) {
this.x = x;
},
doStuff: function () {
return 'x is ' + this.x;
}
};
a.js
'use strict';
var b = require('./b');
// Default config:
console.log(b.doStuff()); // 'x is default'
// Reconfigure:
b.configure(42);
console.log(b.doStuff()); // 'x is 42'
不过我觉得比较丑...坚持原来的想法
您可以使选项参数选项不再需要空对象,而不是完全删除函数调用:
module.exports = function(opts) {
opts = opts || {};
return {
// module instance
};
}
它并没有完全消除对 ()
的需求,但比 ({})
更好。
所以,我有这个问题 - 当我遇到 JavaScript 或节点问题时,不可避免地是我的编码问题 ;)
所以冒着被嘲笑的风险,这就是问题所在:
我有一个模块有一个可选的配置参数
使用标准模式,这是我的:
module.exports = function(opts){
return {
// module instance
};
}
在调用代码中有这个
var foo = require('bar')({option: value})
如果没有要传递的选项,代码如下所示
var foo = require('bar')({})
哪个有点丑
所以,我想这样做
var foo = require('bar')
这不起作用,因为导出是一个函数调用
那么,进入正题
a) 有什么方法可以实现这个崇高的目标吗? b) 是否有更好的向模块传递参数的模式?
非常感谢 - 我希望一旦笑声过去,您将能够向我提供一些帮助:)
tldr:坚持 require('foo')('bar');
无法将其他参数传递给 require
。这是 source code,请注意它只需要一个参数:
Module.prototype.require = function(path) {
assert(util.isString(path), 'path must be a string');
assert(path, 'missing path');
return Module._load(path, this);
};
如果你真的真的很想避免()()
,你可以尝试这样的事情:
b.js
'use strict';
module.exports = {
x: 'default',
configure: function (x) {
this.x = x;
},
doStuff: function () {
return 'x is ' + this.x;
}
};
a.js
'use strict';
var b = require('./b');
// Default config:
console.log(b.doStuff()); // 'x is default'
// Reconfigure:
b.configure(42);
console.log(b.doStuff()); // 'x is 42'
不过我觉得比较丑...坚持原来的想法
您可以使选项参数选项不再需要空对象,而不是完全删除函数调用:
module.exports = function(opts) {
opts = opts || {};
return {
// module instance
};
}
它并没有完全消除对 ()
的需求,但比 ({})
更好。