node.js中exports與module.exports的區別

一、rocker.js文件html

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

二、在另外一個文件中
var rocker = require('./rocker.js')
rocker.name()
// 'my name is luoqian'node

三、Module.exports是真正的接口,exports是它的輔助工具,最終返回給調用的是Module.exports而不是exports。
四、全部的exports收集到的屬性和方法,都賦值給了Module.exports。固然,這有個前提,就是Module.exports自己不具有任何屬性和方法。若是,Module.exports已經具有一些屬性和方法,那麼exports收集來的信息將被忽略。
五、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。ui

參考資料:一、http://www.cnblogs.com/pigtail/archive/2013/01/14/2859555.html
二、http://cnodejs.org/topic/5231a630101e574521e45ef8設計

相關文章
相關標籤/搜索