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


    一、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,虽然很多插件需要追加或修改一小块代码才能支持。但改过一次就能反复使用,也不会影响其它标准的支持。总体还算是比较方便实用的。
     
  • 相关阅读:
    Java实现蓝桥杯日志统计
    Java实现蓝桥杯日志统计
    Java实现算法竞赛入门经典例题-蚂蚁
    Java实现算法竞赛入门经典例题-蚂蚁
    Java实现算法竞赛入门经典例题-蚂蚁
    Java实现偶数矩阵(Even Parity, UVa 11464)
    Java实现偶数矩阵(Even Parity, UVa 11464)
    Java实现偶数矩阵(Even Parity, UVa 11464)
    我最喜欢的《远程控制工具》
    CentOS环境下,gdb调试中出现:Missing separate debuginfos, use: debuginfo-install.....的问题
  • 原文地址:https://www.cnblogs.com/ewqv/p/4910268.html
Copyright © 2020-2023  润新知