commonjs vs commonjs2

分享请标明来自:https://www.css3.io/commonjs-vs-commonjs2.html

背景

在 webpack中看到了两个关键字,commonjs 和 commonjs2. 它们与模块导出有着密切关系。

commonjs vs commonjs2 vs exports vs module.exports

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.

这里引用了 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';

    我又产生了一个疑问,exports 看起来是多余的。它所能做的,module.exports都能实现。

  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 只是它的一个别名。搞不清楚关系的时候可以不用这个别名。

参考

https://www.sitepoint.com/understanding-module-exports-exports-node-js/

https://nodejs.org/docs/latest/api/modules.html#modules_exports_alias

https://github.com/webpack/webpack/issues/1114

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值