当前位置: 首页 > news >正文

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

AMD、CMD、CommonJS、ESM 差异

1. 一句话定位

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

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

特性CommonJSAMDCMDESM
全称CommonJSAsynchronous Module DefinitionCommon Module DefinitionES Module
代表Node.jsRequireJSSeaJS浏览器 / 现代构建工具
加载方式同步异步异步静态 / 异步
依赖执行时机运行时提前加载、提前执行就近 require、延迟执行编译时确定
导出方式module.exportsdefinedefineexport / export default
导入方式require()define([…])require()import
支持 Tree Shaking❌ 不支持❌ 不支持❌ 不支持支持
取值方式值拷贝引用引用引用(动态绑定)
现在地位Node 仍在用已淘汰已淘汰现代标准

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

CommonJS(Node)

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

AMD(RequireJS)

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

CMD(SeaJS)

  • 浏览器异步模块化
  • 依赖就近:用到时再require
  • 延迟执行
define(function(require,exports,module){consta=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 顶层thismodule,ESM 是undefined
  • CommonJS 不能用import/export,ESM 不能用require
http://www.jsqmd.com/news/564144/

相关文章:

  • 从零构建Boost串口通信:asio::serial_port实战配置与避坑指南
  • Balena Etcher:终极安全的跨平台镜像烧录工具完整指南
  • FRCRN语音降噪工具入门必看:单通道背景噪声消除完整部署流程
  • Qwen3-TTS-VoiceDesign多场景落地:跨境电商独立站产品页自动语音介绍(支持小语种)
  • 创意社交新玩法:用次元画室生成角色方案,在社区展示构思
  • Qwen3.5-2B镜像部署教程:Docker+Conda双环境适配,兼容NVIDIA/AMD GPU
  • 保姆级教程:BAAI/bge-m3语义分析引擎一键部署,解决所有依赖问题
  • MAUI库推荐五:Maui.PDFView
  • 用 Manim 重现有趣的知觉错觉
  • 别再只盯着线程数了!JMeter压力测试实战:从单接口到混合场景的完整配置与结果分析
  • 万象视界灵坛效果展示:多候选标签间语义冲突检测与消歧建议生成
  • GLM-4.1V-9B-Base一文详解:与Qwen-VL、InternVL2中文视觉理解对比
  • 亲测中山口碑好的可靠手机维修企业
  • 像素艺术爱好者的福音:忍者像素绘卷(天界画坊)保姆级入门
  • RK3588开发板摄像头实战:从MIPI到USB的完整配置指南(附设备树修改技巧)
  • TensorFlow-v2.9镜像新手教程:M1芯片AI开发环境配置
  • 【office2pdf】office2pdf - 产品需求文档 (PRD.md)
  • 手机也能玩转Llama3.1!用Cpolar穿透实现移动端访问LobeChat的5个技巧
  • 无需安装即可畅享B站视频:downkyi绿色版全方位使用指南
  • RTX 4090D专属优化!Wan2.2-I2V-A14B私有部署镜像,小白也能快速上手
  • 使用CMake与vcpkg简化C/C++项目依赖管理
  • 2026AI大淘汰前夜:3个自动化技能让你年薪翻倍,成为筛不掉的职场金粉!
  • VideoAgentTrek-ScreenFilter视频智能过滤实战:基于卷积神经网络的实时画面处理
  • RealRestorer:AI修复真实图像的终极利器
  • Windows Subsystem for Android实战指南:从环境配置到核心功能落地的系统方案
  • 代理IP:按流量还是按IP/时长计费更划算?
  • Flutter项目卡在‘assembleDebug’?Gradle配置优化全攻略
  • Phi-4-Reasoning-Vision入门必看:双卡4090环境配置与THINK/NOTHINK模式详解
  • OWL ADVENTURE系统清理与维护:释放C盘空间与优化存储
  • 产品好却卖不动?90%的小团队都死在这一步