weijiyang / GOOD-IDEA

这里记录一些灵感~详见ISSUES
1 stars 0 forks source link

AMD CMD UMD #34

Open weijiyang opened 4 years ago

weijiyang commented 4 years ago

AMD(异步模块定义)是require.js推广之后的规范产出 主要是针对与浏览器 异步加载模块方案 推崇依赖优先加载

define('module1', ['jquery'], ($) => {
  //do something...
});
//代码中依赖被前置,当定义模块(module1)时,就会加载依赖(jquery)

CMD (公共模块定义)是sea.js推广之后的规范产出 对于模块的依赖CMD延迟执行 推崇依赖就近

define((require, exports, module) => {
  module.exports = {
    fun1: () => {
       var $ = require('jquery');
       return $('#test');
    } 
  };
});
// 如上代码,只有当真正执行到fun1方法时,才回去执行jquery。
//同时CMD也是延自CommonJS Modules/2.0规范

UMD(通用模块定义)是AMD和CommonJS的一个糅合。AMD是浏览器优先,异步加载;CommonJS是服务器优先,同步加载

((root, factory) => {
  if (typeof define === 'function' && define.amd) {
    //AMD
    define(['jquery'], factory);
  } else if (typeof exports === 'object') {
    //CommonJS
    var $ = requie('jquery');
    module.exports = factory($);
  } else {
    //都不是,浏览器全局定义
    root.testModule = factory(root.jQuery);
  }
})(this, ($) => {
  //do something...  这里是真正的函数体
});
weijiyang commented 4 years ago

认识AMD CMD UMD COMMONJS