Skip to content
字数
340 字
阅读时间
2 分钟

CommomJS 和 ES Module

CommonJS和ES Module

AMD

AMD 规范是非同步加载模块,允许指定回调函数。浏览器环境下,要从服务器端加载模块,就必须采用非同步模式,因此浏览器端一般采用 AMD 规范

AMD 规范使用 define 方法定义模块,如果我们定义的模块本身也依赖其他模块,那就需要将它们放在 [] 中作为 define() 的第一参数

定义模块

js
define(['package/lib'], function(lib){
  function foo(){
    lib.log('hello world!');
  }

  return {
    foo: foo
  };
});

使用模块

js
// 引用模块,将模块放在[]内
require(['jquery', 'math'],function($, math){
  var sum = math.add(10,20);
  $("#sum").html(sum);
});

UMD

umd 是一种思想,就是一种兼容 commonjs,AMD,CMD 的兼容写法,define.amd / define.cmd / module 等判断当前支持什么方式

UMD 先判断支持 Node.js 的模块(exports)是否存在,存在则使用 Node.js 模块模式。再判断是否支持 AMD(define 是否存在),存在则使用 AMD 方式加载模块。都不行就挂载到 window 全局对象上面去

js
(function (root, factory) {
if (typeof define === 'function' && (define.amd || define.cmd)) {
//AMD,CMD
define(['b'], function(b){
return (root.returnExportsGlobal = factory(b))
});
} else if (typeof module === 'object' && module.exports) {
//Node, CommonJS之类的
module.exports = factory(require('b'));
} else {
//公开暴露给全局对象
root.returnExports = factory(root.b);
}
}(this, function (b) {
return {};
}));

贡献者

The avatar of contributor named as jiechen jiechen

页面历史

撰写