这里的知识不太熟,找了些资料。但暂时还没理清他们的关系,就先全贴上来,看完再整理。
历史发展
- 前端模块化的发展 - whilefor 的文章 - 知乎
- 前端模块化发展历史(commonJS、AMD、CMD、UMD、ES6 不含 webpack) - 小 jerry 有话说的文章 - 知乎
- 前端模块化的十年征程 - 落落的文章 - 知乎
各规范对比
- nodejs 采用 CommonJS -> 服务端 动态引入,执行时引入 module.exports, require 输出值的传递,运行时加载
- AMD -> 浏览器 (requireJS) 提前执行 依赖前置
- CMD(sea.js)-> 静态引入,编译时引入,因此必须放在最外层 延迟执行 依赖就近,CMD 与 CommonJS 不一样
- UMD -> AMD 与 CommonJS 结合的结果,浏览器+服务器
- ES6 Module -> 完全静态化 ,输出值的引用,编译时输出接口
官方规范
「万字进阶」深入浅出 Commonjs 和 Es Module - 掘金知乎
- Commonjs 和 Es Module 有什么区别 ?
- Commonjs 如何解决的循环引用问题 ?
- 既然有了 exports,为何又出了 module.exports ? 既生瑜,何生亮 ?
- require 模块查找机制 ?
- Es Module 如何解决循环引用问题 ?
- exports = {} 这种写法为何无效 ?
- 关于 import() 的动态引入 ?
- Es Module 如何改变模块下的私有变量 ?
先看这个