Commonjs
- Commonjs是一个偏向于服务器端的规范。Node.js采用了这个规范。 根据CommonJS规范,一个单独的文件就是一个模块。加载模块使用require方法,该方法读 取一个文件并执行,最后返回文件内部的exports对象。CommonJS 加载模块是同步的,所以只有加载完成才能执行后面的操作
AMD
- 加载模块是异步方式,模块的加载不影响它后面语句的执行。所有依赖这个模块的语句,都定义到一个回调函数中,等到加载完成之后,这个回调函数才会运行。
- AMD规范使用define方法定义模块,通过数组引入依赖 ,回调函数通过形参传入依赖:
define(["/libs/jquery"], function(jquery){
function log(){
alert("hello world!");
}
return {
log: log
}
});
define(function(require, exports, module){
var module = require("module");
module.doSometing( );
exports.do = function(){
module.doSometing( );
}
});
- AMD 是 RequireJS 在推广过程中对模块定义的规范化产出
CMD
- CMD 是 SeaJS 在推广过程中对模块定义的规范化产出
- CMD和AMD的区别有以下几点:
- 对于依赖的模块AMD是提前执行,CMD是延迟执行。不过RequireJS从2.0开始,也改成可以延迟执行(根据写法不同,处理方式不通过)。
- CMD推崇依赖就近,AMD推崇依赖前置。
amd//
define(['./a','./b'], function (a, b) {
//依赖一开始就写好
a.test();
b.test();
});
cmd//
define(function (requie, exports, module) {
//依赖可以就近书写
var a = require('./a');
a.test();
...
//软依赖
if (status) {
var b = requie('./b');
b.test();
}
});
网友评论