欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-25 11:05:11
一、AMD   AMD就只有一个接口:define(id?,dependencies?,factory);   它要在声明模块的时候制定所有的依赖(de...
一、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,虽然很多插件需要追加或修改一小块代码才能支持。但改过一次就能反复使用,也不会影响其它标准的支持。总体还算是比较方便实用的。