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
三大主流规范