module.exports与Node.js中的导出

我在Node.js模块中发现了以下契约:

module.exports=exports=nano=function database_module(cfg){…}

我想知道module.exportsexports之间有什么区别,为什么在这里使用这两种方法

尽管这个问题早就被回答和接受了,但我只想分享我的2美分:

您可以想象,在文件的最开始处有这样的内容(仅供解释):

var模块=新模块(…);
var exports=module.exports;

因此,无论您做什么,只要记住当您从其他地方需要模块时,module.exports和NOTexports将从您的模块返回

所以当你做一些类似的事情时:

导出.a=函数(){
console.log(“a”);
}
exports.b=函数(){
console.log(“b”);
}

您正在向模块所指向的对象添加两个函数ab。导出点,因此返回结果的类型将是对象{a:[函数],b:[函数]}

当然,如果在本例中使用module.exports,而不是exports,您将得到相同的结果

在这种情况下,您希望您的模块.exports的行为类似于导出值的容器。然而,如果您只想导出构造函数,那么您应该知道如何使用模块.exportsexports;(请再次记住,module.exports将在您需要时返回,而不是export

module.exports=function Something(){
console.log('blabla');
}

现在,typeof返回的结果是'function',您可以要求它并立即调用,如:

var x=require('./file1.js')()因为您将返回的结果覆盖为函数

但是,使用导出不能使用以下内容:

exports=function Something(){
console.log('blabla');
}
var x=require('./file1.js')()//错误:require不是一个函数

因为使用exports,引用不再指向module.exports指向的对象,因此exportsmodule.exports之间不再存在关系。在本例中,module.exports仍然指向将返回的空对象{}

另一个主题的公认答案也应有助于:
JavaScript是否通过引用传递

发表评论