nodejs有自己的模塊系統,分為文件模塊和內置模塊。webpack是運行在node環境中,在學習vue-cli的webpack配置的時候,
發現有的文件模塊:
exports.fun1=function(param){ // }
exports.fun2=function(param){ // },
比如utils.js文件。。。
而有的文件模塊:
module.exports = { // }
他們有什么區別呢?我只是自己的理解與資料總結,會一直更新與更改:
- 1.每個
js文件一創建,都有一個var exports = module.exports = {};,使exports和module.exports都指向一個空對象。 - 2.
module是全局內置對象,exports是被var創建的局部對象。 - 3.
module.exports和exports所指向的內存地址相同
- 1.
module.exports像是exports的大哥,當module.exports以{}整體導出時會覆蓋exports的屬性和方法, - 2.注意,若只是將屬性/方法掛載在
module.exports./exports.上時,exports.id=1和module.exports.id=100,module.exports.id=function(){}和exports.id=function(){},最后id的值取決於exports.id和module.exports.id的順序,誰在后,就是最后的值
- 3.若
exports和module.exports同時賦值時,exports所使用的屬性和方法必須出現在module.exports,若屬性沒有在module.exports中定義的話,出現undefined,若方法沒有在module.exports中定義,會拋出TypeError錯誤。RHS查詢
總之:如果只是單一屬性或方法的話,就使用exports.屬性/方法。要是導出多個屬性或方法或使用對象構造方法,結合prototype等,就建議使用module.exports = {}。
待求證,這只是總結資料的。
