浅析module.exports和exports区别和使用

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

总结:

  1. exports只是module.exports的引用
  2. 如果你想要使用exports导出模块,千万不能给它赋值!
  3. 稳一点的做法是使用module.exports,虽然exports用起来是挺爽的
原文地址:https://www.cnblogs.com/wljqds/p/10611000.html