如果我有一个节点模块(我写过)并且我想传递一个值,我可以这样做:
var someValue process.env.SomeKey || '';
var someModule = require('./someModule');
someModule.setOption({ 'SomeKey' : someValue });
但感觉我正在重新发明轮子。
有更好的方法可以做到这一点还是完全主观?
答案 0 :(得分:32)
通常,您只需从模块中导出一个函数:
module.exports = function(opts){
return {
// module instance
};
}
然后在要求页面中:
var mod = require('module')({ someOpt: 'val' });
但实际上,无论你想做什么,都要这样做。没有固定的标准。
答案 1 :(得分:2)
我通常构建具有类似组件的模块,有时只是一个类,或者甚至只是选择一些方法。
(function () {
var myClass = function (opts) {
this.opts = opts;
};
myClass.prototype.blah = function () {
console.log('blah');
};
exports.myClass = myClass;
})();
然后在您正在使用该模块的文件中。
var mymodule = require('./mymodule');
var myInstance = new mymodule.myClass({opt1: 'blah'});
myInstance.blah();
当然,您不需要只传递选项对象:)
答案 2 :(得分:1)
是的,这完全是主观的。
按照你演示的方式做到这一点很好。您也可以通过将其分配给module.exports
来导出函数或类。