module.exports和exports
寫node的時候,特別是自定義模塊的時候,都是一頓亂敲,然后module.exports={}
完事。
但有時候去看別人寫的代碼的時候會發現還可以exports
,比如導出一個函數exports.fn = function(){}
這樣總少寫了module,感覺更簡潔。
為了讓自己寫代碼更快樂一點,我決定搞清楚它們的區別。
查看官方文檔,谷歌一波。
最后發現,exports只是module.exports的全局引用,原文是這樣說的:
"exports is assigned the value of module.exports before the module is evaluated."
意思是:在模塊被導出之前exports被賦值為module.exports。
用中文的話來說就是一個全局引用,在模塊內部你都可以使用exports導出一些東西。
值得注意的是,你不能給exports賦值,這很重要,很重要,很重要。
比如,你想導出一個類。
class girl {
constructor(age) {
this.age = age
}
love(u) {
return "你是個好人!"
}
}
// 把她導出去
exports = girl // 出錯! 不能重寫exports!
// 正確做法
module.exports = girl
總結:
- exports只是module.exports的引用
- 如果你想要使用exports導出模塊,千萬不能給它賦值!
- 穩一點的做法是使用module.exports,雖然exports用起來是挺爽的