ES6 模块,CommonJS,AMD,CMD,UMD之间的区别

2021-12-09  本文已影响0人  不看盛景不叙深情

很多人分不清ES6模块,CommonJS,AMD,CMD,UMD,今天就从特性和使用,来说一下,他们之间的区别.

1.ES6模块

  // profile.js
    var year = 1958;
    export { year };
    export default year;

  //test.js
    import { year } from './profile.js'; //对应export {}
    import year from './profile.js';  //对应export default

2.CommonJs

CommonJs 主要应用与nodejs服务端.

//lib.js
 function incCounter() {
   counter++;
  }
  module.exports = 
     incCounter: incCounter,
  };

//main.js
const mod = require('./lib');
console.log(mod.counter);  // 3
mod.incCounter();

3.AMD

AMD的全称是Asynchronous Module Definition,异步加载模块.它主要是使用在浏览器上.它的 使用定义需要使用requireJS.

define('moduleName',['a','b'],function(ma, mb) {
  return someExportValue;
})

require(['a', 'b'], function(ma, mb) {
   //    do something
})

4.CMD

CMD的全称是Common Module Definition通用模块定义,与AMD类似.不同点在于:AMD推崇依赖前置,提前执行,而CMD推崇依赖就近,延迟执行.它的使用和定义需要使用SeaJS.

 // 定义模块  module.js
define(function(require, exports, module) {
  var $ = require('jquery.min.js')
  $('div').addClass('active');
});

// 加载模块
seajs.use(['module.js'], function(my){
});

5.UMD

UMD的全称为Universal Module Definition,就是一种javascript通用模块定义规范,让你的模块能在javascript所有运行环境中发挥作用。它就是将AMD和Commonjs整合起来,使得代码在不同环境都可以正常运行.

(function(window, factory){
   if (typeof exports === 'object') {
      module.exports = factory()
   } else if (typeof define === 'function' && define.amd) {
      define(factory)
   } else {
     window.eventUtil = factory()
  }
})(this,function () {
    //    do something
})
上一篇下一篇

猜你喜欢

热点阅读