require 用來加載代碼,而 exports 和 module.exports 則用來導出代碼。但不少新手可能會迷惑於 exports 和 module.exports 的區別,爲了更好的理解 exports 和 module.exports 的關係。node
一開始我沒有理解,緣由是我沒有明白nodejs 是怎麼建立module.exports 和 exports,而且兩者關係是怎麼樣的.ui
其實,系統自動給nodejs 文件增長2個變量 exports 和 module, module 又有一個屬性 exports, 這個exports 屬性指向一個空對象 {}; 同時 exports這個變量也指向了這個空對象{};spa
因而就有了 exports => {} <=module.exports.code
這2個exports 實際上是沒有直接關係的,惟一的關係是: 他們初始都指向同一個空對象{}; 若是其中一個不指向作個空對象了, 那麼他們的關係就沒有了.對象
咱們常常看到這樣的寫法:blog
exports = module.exports = somethings
上面的代碼等價於:class
module.exports = somethings
exports = module.exports
原理很簡單,即 module.exports 指向新的對象時,exports 斷開了與 module.exports 的引用,那麼經過 exports = module.exports 讓 exports 從新指向 module.exports 便可require