相同点:三者都是为了实现javascript模块化而产生的规范。
不同点:
commonjs是随着nodejs的火而火起来的,nodejs采用了commonjs规范,实现了(require、exports、module)等。
AMD 最好的实现模块化的方式是实现前后端统一的标准,无奈,commonjs并不适用于浏览器。比如:在后端使用
{
var math = require('math');
math.add(2, 3);
}
在加载完成math.js模块之后,可以计算2+3,但是若是在前端使用,由于同步加载过程中,可能会造成浏览器“假死”的状态,不利用用户的体验,所以异步加载规范AMD诞生。其中的应用实例是require.js。CMD 是在Sea.js中逐渐火起来,推崇的是as lazy as possible。
AMD 和 CMD的主要区别
1: 对于依赖的模块,AMD是提前执行,CMD是延迟执行。不过从require.js2.0起,AMD也实现延迟执行(写法不同,执行方式不同),CMD思想是as lazy as possible.
2: AMD推崇依赖前置,CMD推崇依赖就近。代码如下
//AMD
define(['./a', './b'], function(a, b){
a.doSomething();
......
b.doSomething();
})
//CMD
define(function(require, exports, module){
var a = require('./a');
a.doSomething();
......
var b = require('./b');
b.doSomething();
})
3: AMD的API默认的是一个当多个用,CMD比较严格,指责单一。