前端模块化 AMD、CMD、CommonJS、ESM的差异对比

AMD、CMD、CommonJS、ESM 差异

1. 一句话定位

  • CommonJS :Node 服务端模块化,同步加载
  • AMD :浏览器模块化,RequireJS,提前加载、并行执行
  • CMD :浏览器模块化,SeaJS,就近加载、延迟执行
  • ESM :ES 官方标准,静态编译、现代唯一主流

2. 核心差异对比表(面试必背)

特性 CommonJS AMD CMD ESM
全称 CommonJS Asynchronous Module Definition Common Module Definition ES Module
代表 Node.js RequireJS SeaJS 浏览器 / 现代构建工具
加载方式 同步 异步 异步 静态 / 异步
依赖执行时机 运行时 提前加载、提前执行 就近 require、延迟执行 编译时确定
导出方式 module.exports define define export / export default
导入方式 require() define(...) require() import
支持 Tree Shaking ❌ 不支持 ❌ 不支持 ❌ 不支持 ✅ 支持
取值方式 值拷贝 引用 引用 引用(动态绑定)
现在地位 Node 仍在用 已淘汰 已淘汰 现代标准

3. 逐一看区别(面试口语版)

CommonJS(Node)

  • 同步加载,不适合浏览器(会阻塞渲染)
  • require() 导入,module.exports 导出
  • 导出是值拷贝,导出后外部改不影响内部
  • 不支持 Tree Shaking
  • 仅用于 Node,浏览器不原生支持

AMD(RequireJS)

  • 浏览器异步模块化
  • 依赖前置:一开始就把所有依赖加载并执行
  • 写法:
js 复制代码
define(['a', 'b'], function(a, b) {
  return {}
})
  • 优点:并行加载快
  • 缺点:依赖写一堆,阅读不自然

CMD(SeaJS)

  • 浏览器异步模块化
  • 依赖就近 :用到时再 require
  • 延迟执行
js 复制代码
define(function(require, exports, module) {
  const a = require('./a')
})
  • 更贴近 CommonJS 写法
  • 现在已废弃

ESM(ES Module,现在唯一标准)

  • 官方标准,浏览器 & Node & 构建工具全支持
  • import / export 静态语法
  • 编译时加载,能 Tree Shaking
  • 导出是引用传递,实时更新
  • 支持顶层 await
  • 未来唯一方案

4. 最经典两道面试题答案

AMD vs CMD 区别?

  • AMD:依赖前置,提前执行
  • CMD:依赖就近,延迟执行

CommonJS vs ESM 区别?(必考)

  • CommonJS 是运行时加载 ,ESM 是编译时静态加载
  • CommonJS 同步,ESM 可异步
  • CommonJS 值拷贝 ,ESM 引用传递
  • CommonJS 不支持 Tree Shaking,ESM 支持
  • CommonJS 顶层 this 是 module,ESM 是 undefined
  • CommonJS 不能用 import/export,ESM 不能用 require
相关推荐
huakoh8 分钟前
MCP 调用超时后别急着重试:三步读回分清执行状态
前端
打工仔折腾 AI8 分钟前
把模型切换交给平台:用蓝耘智能路由搭建商品评论分析工具
java·服务器·前端·后端·python·性能优化·ai agent 实战
不可能片场15 分钟前
Electron 发布标题的冒号 击穿命令行解析
前端·electron
reeswell22 分钟前
我开源了 inspect-devtools —— 让 AI 终于能"看见"你屏幕上的组件
前端·人工智能
Yuhano33 分钟前
W3. 实现Agent工具调用引擎
前端·aigc·ai编程
flash俊杰33 分钟前
第三节 基于 Vue 3 的领域模型架构——Schema 驱动的低代码后台实战
前端
热爱23338 分钟前
dsh里使用chatgpt plus或pro会员而不是apikey,其实很简单。
前端·openai
linux_cfan43 分钟前
videojs v10 源代码系列解读:32 · Reactor 模型:信号驱动的状态机
前端·javascript·音视频
福兮说1 小时前
Base64 遇上中文和 emoji:btoa 报错、解出一串 %E7、URL 里加号变空格,六个坑一次说清
前端·javascript·base64·编码
IMPYLH1 小时前
HTML 的 <title> 元素
前端·javascript·html