浅析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
总结:
- exports只是module.exports的引用
- 如果你想要使用exports导出模块,千万不能给它赋值!
- 稳一点的做法是使用module.exports,虽然exports用起来是挺爽的
本文采用知识共享署名 4.0 国际许可协议进行许可。 转载时请注明原文链接,如果对本文 的内容有疑问,请留言,谢谢。