模块化
AMD
实现AMD的库有RequireJS
、curl
、Dojo
AMD采用require()语句加载模块,但是不同于CommonJS,它要求两个参数:
require([module], callback)
第一个参数[module],是一个数组,里面的成员就是要加载的模块;第二个参数callback,则是加载成功之后的回调函数。
记载和执行是异步的,浏览器不会假死。
require.js
require.js的诞生,就是为了解决这两个问题:
(1)实现js文件的异步加载,避免网页失去响应;
(2)管理模块之间的依赖性,便于代码的编写和维护。
require.config({
baseUrl: ".",
paths: {
'modul': './lib/moudle'
}
}
)//对模块加载进行定义。
define(id?,dependencies?,factory) //定义模块。
require(['moduleA', 'moduleB', 'moduleC'], function (moduleA, moduleB, moduleC){
// some code here
});//加载模块
CMD 规范
CMD(Common Module Definition)是 SeaJS推广过程中产生的。
define(function(require,exports,module){...});
AMD vs CMD
SeaJS对模块的态度是懒执行, 而RequireJS对模块的态度是预执行
CommandJs
CommonJS是服务器端模块的规范,因为同步加载的原因,并不适合前端。Node.js采用了这个规范。
1.在一个模块中,存在一个自由的变量”require”,它是一个函数。
2.在一个模块中,会存在一个名为”exports”的自由变量,它是一个对象,模块可以在执行的时候把自身的API加入到其中。
3。模块必须使用”exports”对象来做为输出的唯一表示