【模块化解读】commonjs vs commonjs2 && exports vs module.exports

背景

最近在用typescript写工具库的时候,无意中在 webpack中看到了两个关键字,commonjs 和 commonjs2. 瞬间产生了好奇。后面看了issues才得知它们与模块化 导出有着密切关系。

CommonJs spec defines only exports. But module.exports is used by node.js and many other CommonJs implementations.
commonjs mean pure CommonJs
commonjs2 also includes the module.exports stuff.

大致意思是:
CommonJs规范仅定义出口。但是模块。使用出口节点。js和许多其他CommonJs的实现。
commonjs的意思是纯commonjs
commonjs2还包括模块。出口的东西。

这里引用了 https://github.com/webpack/webpack/issues/1114 的回答,commonjs vs commonjs2 这两个概念问题迎刃而解。大家可自行阅览

那到底module.exports vs exports 区别是什么呢?

自己查阅了很多文章,仍然很懵,但觉得这篇文章https://www.sitepoint.com/understanding-module-exports-exports-node-js/ 解释得比较到位。

我所理解的关键点:
1.require的大致实现:

	var require = function(path) { 
         // ... 
         return module.exports; 
     };

2.module.exports => {} <= exports 指向同一个对象。 两者最好不要同时使用。

// exports 仅适用于:

exports.a = 'xxx';

// module.exports 适用于

module.exports = 'xxx';
module.exports.a = 'xxx';

那么问题来了好像export能做的,module.export都能满足。所以产生疑问,知识才有了拓展的可能。

3.其实2中的疑问一点也没错,nodejs 官方文档中提及https://nodejs.org/docs/latest/api/modules.html#modules_exports_alias exports
只是module.exports的一个别名 还提示当你搞不清楚的时候,就用module.exports。

总结

1.commonjs 规范只定义了exports,而 module.exports是nodejs对commonjs的实现,实现往往会在满足规范前提下作些扩展,我们这里把这种实现称为了commonjs2

2.module.exports 是nodejs对commonjs的具体实现。exports 只是它的一个别名。搞不清楚关系的时候可以不用这个别名。

戏言: 不知不觉头发丝儿又少了几根,“呜呜呜呜,码仔痛哭“

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值