美文网首页
JavaScript模块化编程 - CommonJS, AMD

JavaScript模块化编程 - CommonJS, AMD

作者: Anon_0507 | 来源:发表于2017-12-26 16:03 被阅读0次
         CommonJs是一个组织,它定了一个Modules规范,用来解决JS没有模块(js文件)化管理代码的功能。
    

    关键部分是require - 引入依赖;export - 导出模块这两个函数。然而这个Modules规范当初是为服务器端设计的,是一个同步模式,这种模式并不适合浏览器端,因为浏览器同步模式一个一个加载模块会变得打开非常的慢。所以,这时候AMD就是为了解决这个问题而产生的,它最大的特点就是可以异步加载模块,具体不同在于AMD有一个define函数,他可以让当前模块运行时先加载当前模块所需要的模块。
    而RequireJs就是AMD现在用的最广泛,最流行的实现。所以这三者之间的关系可以这样理解:CommonJs(泛指Modules规范)和AMD都是为了解决JS模块化的规范API,CommonJs更适合于服务器端,而AMD基本就是用于浏览器端(不过也可以用于服务器端,比如Node loader方向),而RequireJs就是AMD最流行的实现。
    而CMD则是国内玉伯大神在开发SeaJs的时候提出来的,属于CommonJs的一种规范
    AMD:RequireJs
    CMD : SeaJs
    CMD和AMD都是CommonJs的一种规范的实现主义,SeaJs和RequireJs就是对应的实践。说白了就是CMD和AMD是理论,SeaJs和RequireJs是对应的产物。

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

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

    AMD规范后来也允许输出的模块兼容CommonJs规范(同步),这时define方法需要写成下面这样:
    define(function (require, exports, module){
    var someModule = require("someModule");
    var anotherModule = require("anotherModule");

    someModule.doTehAwesome();
    anotherModule.doMoarAwesome();

    exports.asplode = function (){
    someModule.doTehAwesome();
    anotherModule.doMoarAwesome();
    };});

    相关文章

      网友评论

          本文标题:JavaScript模块化编程 - CommonJS, AMD

          本文链接:https://www.haomeiwen.com/subject/jbljgxtx.html