exports與module.exports的區別

nodejs有本身的模塊系統,分爲文件模塊和內置模塊。webpack是運行在node環境中,在學習vue-cli的webpack配置的時候,vue

發現有的文件模塊:

exports.fun1=function(param){ // } node

 exports.fun2=function(param){ // },webpack

好比utils.js文件。。。web

而有的文件模塊:

module.exports = { // }vue-cli

他們有什麼區別呢?我只是本身的理解與資料總結,會一直更新與更改:學習

  • 1.每一個js文件一建立,都有一個var exports = module.exports = {};,使exportsmodule.exports都指向一個空對象。
  • 2.module是全局內置對象,exports是被var建立的局部對象。
  • 3.module.exportsexports所指向的內存地址相同
  • 1.module.exports像是exports的大哥,當module.exports{}總體導出時會覆蓋exports的屬性和方法,
  • 2.注意,若只是將屬性/方法掛載在module.exports./exports.上時,exports.id=1module.exports.id=100module.exports.id=function(){}exports.id=function(){},最後id的值取決於exports.idmodule.exports.id的順序,誰在後,就是最後的值
  • 3.若exportsmodule.exports同時賦值時,exports所使用的屬性和方法必須出如今module.exports,若屬性沒有在module.exports中定義的話,出現undefined,若方法沒有在module.exports中定義,會拋出TypeError錯誤。RHS查詢

總之:若是隻是單一屬性或方法的話,就使用exports.屬性/方法。要是導出多個屬性或方法或使用對象構造方法,結合prototype等,就建議使用module.exports = {}spa

  待求證,這只是總結資料的。prototype

相關文章
相關標籤/搜索