一、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設計