Commonjs困惑一:使用module.exports还是exports?
发布于 作者:苏南大叔 来源:程序如此灵动~

commonjs
这种模块化编程方案实际存在着一些困惑,苏南大叔在本文中说说第一个困惑,那就是:在commonjs
模块的代码里面,用什么语句导出呢?答案是module.exports
和exports
,为啥有两个答案,哪一个更好呢?这个就是本文要讨论的方案。

本文测试环境:node@14.16.0
。本文的结论是,使用module.exports
,而不要使用exports
。如果你想知道理由,就继续往下听苏南大叔的描述。
基本姿势
从上一篇文章可以看出,commonjs
模块化方案中,存在着如下两种写法:


在理解上, 就可以认为有一句隐藏的语句,将module.exports
和exports
画上等号。
在最终的导出生效上,还是认定为module.exports
有效,exports
只是一个更加简单的写法,一个快捷方式罢了。
问题来了
既然,有了隐藏语句exports = module.exports = {};
。但是下面的写法,导出是失效的:
同样是exports
,可见:用exports
去“点.”操作,在对象上挂个新属性,是可以的。但是用“等号=”操作是不行的,因为这个是赋予新的值了。(自己脑补好了...)

所以,本篇文章的最终结论是:使用module.exports
可以一了百了,简单粗暴有效果。如果使用exports
的话,就存在着写错的可能性。至于两者混合使用的话,苏南大叔觉得,还是别给自己找麻烦了。用个module.exports
就最好了。
相关链接
总结
一句话总结,commonjs
使用module.exports
导出,尽量不要使用exports
导出!
更多commonjs
文章,请点击苏南大叔的博客:


