将可选parameter passing给require()

所以,我有这个问题 – 当我有JavaScript或节点的问题不可避免地是我的编码是问题;)

所以在嘲笑的风险,这是问题:

我有一个模块,它有一个可选的参数configuration

使用标准模式,这是我有:

module.exports = function(opts){ return { // module instance }; } 

在调用代码中有这个

 var foo = require('bar')({option: value}) 

如果没有选项可以通过,代码如下所示

 var foo = require('bar')({}) 

这有点看起来丑陋

所以,我想这样做

 var foo = require('bar') 

这不起作用,因为出口是函数调用

所以,到这个问题的肉

a)有没有办法达到这个崇高的目标? b)将parameter passing给模块有更好的模式吗?

非常感谢 – 而且我希望一旦笑声过去了,您将能够以我的方式发送一些帮助:)

       

网上收集的解决方案 "将可选parameter passing给require()"

而不是完全删除函数调用,您可以使选项参数选项删除需要一个空的对象:

 module.exports = function(opts) { opts = opts || {}; return { // module instance }; } 

它不完全删除()的需要,但比({})更好。

tldr :坚持require('foo')('bar');

没有办法传递额外的参数来require 。 这是源代码 ,注意它只是一个参数:

 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' 

但是我认为这是更丑陋的…坚持原来的想法。