模块化规范Common.js,AMD,CMD

时间:2024-11-28 13:33:44

  随着网站规模的不断扩大,嵌入网页中的javascript代码越来越大,开发过程中存在大量问题,如:协同开发,代码复用,大量文件引入,命名冲突,文件依赖。

  模块化编程称为迫切的需求。

  所谓的模块,就是实现特定功能的一组方法。

  1. 模块的发展

  1)函数封装

     // 存在问题:污染全局变量,模块成员之间看不出直接关系
function add(x, y) {
return x + y;
}

  2)对象封装

     // 存在问题:暴露模块中的成员,可以被修改
var math = {
add: function(x, y) {
return x + y;
}
}

  3)立即执行函数

     // 没有暴露私有成员,模块化基本写法
var math = (function() {
var add = function(x, y) {
return x + y;
}
return {
add: add;
}
})();

   我们根据实际情况,可以设置传入参数,为模块添加方法。

     // 为传入的模块中添加方法,并返回,如果是空对象,创建一个空对象,添加方法返回。
var module = (function(module) {
module.add = function(x, y) {
return x + y;
}
return module;
})(module || {});

  2. 模块化规范

  1)Common.js

  common.js规范是服务器端的模块化规范,它使用的是同步加载的方式,必须模块加载完之后,才可以使用模块中的方法。

     // 加载模块
var math = require('math');
// 使用模块中的方法
math.add(x, y);

  2) AMD(Asynchronous Module Definition)

  对于浏览器而言,这样会造成页面失去响应。因此Common.js模块定义规范并不适用于浏览器端。因此AMD出现了。

  AMD采用的是异步加载的方式,当模块加载完毕,调用传入的回调函数。在加载的过程中,继续执行之后的代码,不会阻塞页面渲染。

     // module是要加载模块,回调函数中编写处理逻辑
require([module], function (module) {
...
});

  AMD解决两个问题:

  1)实现js文件的异步加载,避免网页失去响应

  2)管理模块之间的依赖问题,便于代码的编写和维护

  AMD规范网址:https://github.com/amdjs/amdjs-api/wiki/AMD

  3) CMD(Common Module Definition)

  CMD通用模块定义规范,和AMD都实现浏览器端模块化开发的目的。只是AMD提供了后端发展的方式。

  CMD规范网址:https://github.com/seajs/seajs/issues/242