AMD,CMD,UMD规范的区别

AMD

随着RequireJS成为最流行的实现方式,依赖前置


define(['module'], function () {
    //module模块加载完才会执行
    function myFunc(){}; // 方法 
    return myFunc; // 暴露公共方法 
});



CMD

随CommonJS流行起来的规范,推崇依赖就近


// 依赖 
var module = require('module'); 
// 方法 
function myFunc(){}; 
// 暴露公共方法(一个) 
module.exports = myFunc;



UMD

它兼容了AMD和CMD规范,同时还支持老式的“全局”变量规范


(function (root, factory) {
    if (typeof define === 'function' && define.amd) { 
        // AMD 
        define(['jquery'], factory); 
    } else if (typeof exports === 'object') { 
        // Node, CommonJS之类的 
        module.exports = factory(); 
    } else { 
       // 浏览器全局变量(root 即 window) 
       root.returnExports = factory(); 
    } 
}(this, function () { 
    // 方法 
    function myFunc(){}; 
    // 暴露公共方法 
    return myFunc; 
}));



AMD 是require.js在推广过程中对模块定义的规范化产出

异步加载模块,它的模块支持对象,函数构造器,字符串 ,JSON等各种类型的模块


CMD 主要用于服务器端的规范,比如目前的nodeJS

一个单独的文件就是一个模块,每一个模块都是一个单独的作用域,在一个文件定义的变量,都是私有的,对其他文件是不可见的。



在客户端中,AMD和CMD都是异步加载代码的。


UMD规范糅合AMD和CMD规范,首先判断node.js的模块exports是否存在,存在则使用node.js模块

再判断是否支持AMD规范 即(typeof define === 'function' && define.amd),存在则使用AMD规范加载模块




确认 取消
2条评论
ssssss