1. 程式人生 > >module.exports和exports

module.exports和exports

好的 寫法 ngs log req 對象 logs 屬性 span

require 用來加載代碼,而 exports 和 module.exports 則用來導出代碼。但很多新手可能會迷惑於 exports 和 module.exports 的區別,為了更好的理解 exports 和 module.exports 的關系。

一開始我沒有理解,原因是我沒有明白nodejs 是怎麽創建module.exports 和 exports,並且二者關系是怎麽樣的.

其實,系統自動給nodejs 文件增加2個變量 exports 和 module, module 又有一個屬性 exports, 這個exports 屬性指向一個空對象 {}; 同時 exports這個變量也指向了這個空對象{};

於是就有了 exports => {} <=module.exports.

這2個exports 其實是沒有直接關系的,唯一的關系是: 他們初始都指向同一個空對象{}; 如果其中一個不指向做個空對象了, 那麽他們的關系就沒有了.

我們經常看到這樣的寫法:

exports = module.exports = somethings

上面的代碼等價於:

module.exports = somethings
exports = module.exports

原理很簡單,即 module.exports 指向新的對象時,exports 斷開了與 module.exports 的引用,那麽通過 exports = module.exports 讓 exports 重新指向 module.exports 即可

module.exports和exports