AMD和CMD应该算是javascript最早的模块化规范了,甚至现在js中的模块化规范也是根据其演变而来
AMD
规范是对RequireJS
推广过程中的规范化产出CMD
是对SeaJS
推广过程中的规范化产出- 现在使用更多的还是
CommentJS
和ES6
规范
这些规范都是为了实现javascript的模块化开发而存在的
区别
- 对于依赖的模块, AMD是前置执行, 加载所有依赖在执行模块内代码
CMD是就近执行, 就是依赖懒加载, 用到再加载不用不加载
不过从RequireJS2.0开始AMD也支持延迟执行的写法, 并且还支持全局require
// AMD
define(['./a', ./b], function (a, b){
a.doSomething();
b.doSomething();
})
// CMD
define(function (require, exports, module){
const a = require('a');
a.doSomething();
exports.b = function doSomething()
})
- AMD 的 API 默认是一个当多个用,CMD 的 API 严格区分,推崇职责单一