当前位置: 首页 > news >正文

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

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

http://www.hskmm.com/?act=detail&tid=35483

相关文章:

  • 【GitHub每日速递 251021】一键将全新Arch安装变身超美现代Web开发系统!Omarchy太神了
  • 藏宝阁
  • [Mongodb]mongodb的安装以及增删改查
  • PHP 8.5 新特性 闭包可以作为常量表达式了
  • 【JavaScript-基础】split,splice,slice 三者的用法
  • 2025 代码源 CSP-S 模拟赛复盘
  • 2025.10.21——1绿
  • 【JavaScript-基础】map、forEach、for、for in、for of等的区别
  • dotnet 利用 Windows 注册表实现开机自动启动
  • 使用uWSGI和Nginx部署深度学习模型指南
  • 帮我回答这些问题
  • Python 类属性的应用场景
  • 为什么很多人分不清关联和聚合?
  • 机器学习商业应用实战指南
  • 在线签名工具,手写签名保存为png图片,用于生成电子签名用于word文档等
  • 什么情况下,有必要将属性设为类属性而非实例属性?
  • 在线签名工具,保存为png图片,用于生成电子签名用于word文档等
  • 玄机——第五章 Windows 实战-evtx 文件分析
  • CityRefer:城市规模点云数据上的地理感知 3D 视觉接地数据集 - MKT
  • SensatUrban语义分割数据集SensatUrban - MKT
  • 推荐算法参考资料
  • LLM学习笔记DAY8
  • 软件工程第二次团队作业——构建一个智能体
  • VoxelNeXt 用于 3D 对象检测和跟踪的完全稀疏 VoxelNet(CVPR 2023) - MKT
  • CityNav:包含地理信息的语言目标空中导航数据集 - MKT
  • Grounded-SAM 使用文本提示检测和分割所有内容 - MKT
  • Linux权限维持-后门
  • 视觉和语言 国防科大清华城市空间无人机导航推理!GeoNav:赋予多模态大模型地理空间推理能力,实现语言指令导向的空中目标导航 - MKT
  • mysql数据库查询参考
  • Python理论题目集