当前位置: 移动技术网 > IT编程>开发语言>JavaScript > 浅析JS中的模块规范AMD和CMD

浅析JS中的模块规范AMD和CMD

2017年12月21日  | 移动技术网IT编程  | 我要评论
一、AMD

 

AMD就只有一个接口:define(id?,dependencies?,factory);

 

它要在声明模块的时候制定所有的依赖(dep),并且还要当做形参传到factory中,像这样:

 

define(['dep1','dep2'],function(dep1,dep2){...});
要是没什么依赖,就定义简单的模块,下面这样就可以啦

define(function(){
     var exports = {};
     exports.method = function(){...};
     return exports;
});

 

这里有define,把东西包装起来,那Node实现中怎么没看到有define关键字呢,它也要把东西包装起来,其实,只是Node隐式包装了而已..

 

RequireJS就是实现了AMD规范的

 

二、CMD

 

玉伯写了seajs,就是遵循他提出的CMD规范,比AMD稍微强大点,用起来感觉也方便些

 

三、AMD与CMD的区别

 

CMD相当于按需加载,定义一个模块的时候不需要立即制定依赖模块,在需要的时候require就可以了,比较方便;而AMD则相反,定义模块的时候需要制定依赖模块,并以形参的方式引入factory中

 

//AMD方式定义模块
define(['dep1','dep2'],function(dep1,dep2){
     //内部只能使用制定的模块
      return function(){};
});
//CMD
define(function(require,exports,module){
   //此处如果需要某XX模块,可以引入
   var xx=require('XX');
});

 

而SEAJS也有use功能也是需要先引入所有依赖的模块,如

 

//SEAJS.Use方式

seajs.use(['dep1','dep2'],function(dep1,dep2){

     //这里实现事务

});

 四、插件支持

 

但全球有两种比较流行的 JavaScript 模块化体系,一个是 Node 实现的 CommonJS,另外一个是 AMD。很多类库都同时支持 AMD 和 CommonJS,但是不支持 CMD。或许国内有很多 CMD 模块,但并没有在世界上流行起来。

现在比较火的 React 及周边类库,就是直接使用 CommonJS 的模块体系,使用 npm 管理模块,使用 Browserify 打包输出模块。

不久的将来 ES6 中新的模块化标准,可能就都得遵循新的标准了,什么AMD、CMD可能到时也不会怎么用了。

但是目前来说,前端开发没有用模块化编程就真的out的了,而目前的模块化编程,本人还是建议用SEAJS,虽然很多插件需要追加或修改一小块代码才能支持。但改过一次就能反复使用,也不会影响其它标准的支持。总体还算是比较方便实用的。

 

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网