node.js中exports与module.exports的区别

1、rocker.js文件

 exports.name = function () {
    console.log('my name is luoqian')
}

2、在另一个文件中
var rocker = require('./rocker.js')
rocker.name()
// 'my name is luoqian'

3、Module.exports是真正的接口,exports是它的辅助工具,最终返回给调用的是Module.exports而不是exports。
4、所有的exports收集到的属性和方法,都赋值给了Module.exports。当然,这有个前提,就是Module.exports本身不具备任何属性和方法。如果,Module.exports已经具备一些属性和方法,那么exports收集来的信息将被忽略。
5、Module.exports 与 exports到底用哪个比较好,为什么要这样设计?

Module.exports = {}
exports = Module.exports

如果exports的属性被修改,由于指向的是同一快内存地址,所以Module.exports也会被修改。如果当exports被覆盖时,exports会指向一块新的内存,Module.exports还是指向原来的内存,所以最后两个输出不一样,我们在require时返回的是module.exports而不是exports。
所以当我们是添加到exports的属性,那么exports和module.exports都可以。而如果是直接赋值就要赋给Module.exports。

参考资料:1、http://www.cnblogs.com/pigtail/archive/2013/01/14/2859555.html
2、http://cnodejs.org/topic/5231a630101e574521e45ef8

posted @ 2017-06-29 16:34  罗Q  阅读(136)  评论(0编辑  收藏  举报