进化方向
CommonJS->AMD->CMD->ESM(ES6Module)
模块化的作用
- 解决命名污染,全局污染,变量冲突
- 模块引入/依赖,模块暴露的方式
- 决定依赖顺序
几种规范总结
- CommonJS规范主要用于服务端编程,加载模块是同步的,这并不适合在浏览器环境,因为同步意味着阻塞加载,浏览器资源是异步加载的,因此有了AMD CMD解决方案。
- AMD规范在浏览器环境中异步加载模块,而且可以并行加载多个模块。不过,AMD规范开发成本高,代码的阅读和书写比较困难,模块定义方式的语义不顺畅。
- CMD规范与AMD规范很相似,都用于浏览器编程,依赖就近,延迟执行,可以很容易在Node.js中运行。不过,依赖SPM 打包,模块的加载逻辑偏重。
- ES6 在语言标准的层面上,实现了模块功能,而且实现得相当简单,完全可以取代 CommonJS 和 AMD 规范,成为浏览器和服务器通用的模块解决方案。
in short
CommonJS:同步加载,可缓存,适用于服务器
AMD:支持异步加载,允许指定回调函数,适用于浏览器
CMD:结合 CommonJS 和 AMD,异步加载,用于浏览器
ESM:编译时确定依赖关系
Reference:
link1:邶念
link2:_BuzzLy