前言:
- CommonJS是服务器端js模块化的规范,NodeJS是这种规范的实现
- AMD(异步模块定义)和CMD(通用模块定义)都是浏览器端js模块化的规范。requireJS遵循的是AMD,seaJS遵循的是CMD
- 这三个都是为Js模块化加载而生的,使模块能够按需加载,使系统同庞杂的代码得到组织和管理。模块化的管理代码使多人开发得到了更好的合作
AMD(异步模块定义):
- AMD作为一种模块化规范,有其对应的第三方库作为具体实现,最常用的就是RequireJS。也就是说,AMD规范的应用,需要借助RequireJS第三方库才能实现。
- AMD规范是非同步加载模块,允许指定回调函数。
CMD(通用模块定义)
- CMD是SeaJS 在推广过程中对模块定义的规范化产出。
CommonJS
1.根据CommonJS规范,一个单独的文件就是一个模块。加载模块使用require方法,该方法读取一个文件并执行,最后返回文件内部的exports对象。所以,定义一个模块就是写一个新的js文件,但是最后要将文件的内容exports出来。
2.CommonJS 加载模块是同步的,所以只有加载完成才能执行后面的操作
AMD和CMD区别:
1.对于依赖的模块,AMD 是提前执行,CMD 是延迟执行。不过 RequireJS 从 2.0 开始,也改成可以延迟执行(根据写法不同,处理方式不同)。CMD 推崇 as lazy as possible(尽可能的懒加载,也称为延迟加载,即在需要的时候才加载)。
2.CMD 推崇依赖就近,AMD 推崇依赖前置
3.AMD 的 API 默认是一个当多个用,CMD 的 API 严格区分,推崇职责单一。