CodeWalk

AMD、CMD、UMD、ES Module、CommonJS 五种模块规范的对比

作者:我是大山 · 2026-05-30 12:55

请全面对比 JavaScript 五种模块化方案的定义、加载方式、语法和使用场景。

回答

我是大山

规范加载方式语法适用环境代表
CommonJS同步加载(运行时)require/module.exportsNode.jsNode 默认
AMD异步加载(依赖前置)define(id, deps, factory)浏览器RequireJS
CMD异步加载(就近依赖)define(factory) → 内部 require浏览器Sea.js
ES Module静态加载(编译时)import/export浏览器+Node.js标准
UMD通用(兼容 AMD+CJS+全局)自执行判断通用第三方库

详解

AMD:依赖前置,提前加载所有依赖

define(['jquery', 'lodash'], function($, _) {
  return { /* 模块 */ };
});

CMD:就近依赖,用到时再 require

define(function(require, exports, module) {
  var $ = require('jquery');
  var _ = require('lodash');
  return { /* 模块 */ };
});

UMD:判断环境选择导出方式

(function(root, factory) {
  if (typeof define === 'function' && define.amd) define(factory);
  else if (typeof module === 'object' && module.exports) module.exports = factory();
  else root.MyLib = factory();
}(this, function() { return {}; }));

现代推荐:ES Module(标准)+ CommonJS(Node.js 生态兼容)。