知道的朋友應該知道,CommonJS
有兩種匯出方式,如下所示:
// module1.js
const name1 = 'Ben';
const name2 = 'Lisa'
// 匯出方式1
module.exports = {
name1,
name2,
};
// 匯出方式2
exports.name1 = name1;
exports.name2 = name2;
差異
那麼上面這兩種匯出方式有什麼差異呢?
先說結論,從匯出的結果來看,沒有差異。
import module1 from './module1.js'
// 無論module1.js中使用的哪種方式匯出,這裡得到的module1都是一樣的結構。
console.log(module1)
// { name1, name2 }
為什麼沒有差異
至於為什麼兩者沒有差異,原因也很簡單。module.exports
和exports
是相等的,因為exports
就是引用自module.exports
。
const name = 'Ben';
// 這兩個寫法是等價的
exports.name = name
module.exports = { name }
看下圖,給exports
新增一個name
屬性,也就是相當於給module.exports
新增了一個屬性,反之亦然。
注意
避免意外切斷引用關係
不要使用下面的匯出方式,還記得exports
是引用自module.exports
嗎,下面這種寫法,給exports
重新賦值,也就切斷了exports
和module.exports
的引用關係,所以也就無法匯出了。
const name = 'Ben';
exports = {
name
}
避免同時使用兩種方式
const name1 = 'Ben';
const name2 = 'Lisa'
// 匯出方式1
module.exports = {
name1,
};
// 匯出方式2
exports.name2 = name2;
上面同時存在兩種匯出方式的情況,會導致匯出方式2
會被忽略。
還記得他們的引用關係嗎?匯出方式1
將引用關係切斷了,所以就會導致匯出方式2
失敗。