node.js中exports vs module.exports

网上关于这两者的解释颇多,随便乱搜都能找一堆。但能不能快速有助于理解,就见仁见智了。

这里简单讲讲我的理解。

module.exports是一个模块被require后返回的东东。默认情况下,是一个空对象{}。所以你可以这样用:

//module1.js
module.exports.name = 'laoyur';

//app.js
var m = require('./module1');
var name = m.name; // 'laoyur'

也可以直接对module.exports重新赋值,可以是对象,可以是函数,可以是数组……任何合法的js数据类型均可:

//module1.js
module.exports = function() {
    //your code here
};

//app.js
var m = require('./module1');
m(); // 这两行也可以直接简写作require('./module1')();

再来看看exports。

这货说白了其实就是module.exports的一个快捷方式,相当于另一个指针变量,指向了module.exports这个对象。

所以,你可以给exports对象添加任何东东,就像直接给module.exports添加新东东一样。

但是呢,如果你希望导出自定义对象或者其他结构时,你不能图省事直接给exports赋值,你必须用module.exports = 这种方式。这应该是新手容易犯的错误吧。

另外,显而易见,module.exports被重新赋值后,你就再也无法通过修改export来修改module.exports对象了。

总结:

为导出对象添加属性这样用:exports.xxx = yyy;
修改导出对象这样用:module.exports = xxx;
或者烦不了就一直用module.exports,这样最保险,不容易出错。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据