[图解前端]CommonJS AMD ESM UMD SystemJS模块化系统对比图 (附记忆技巧)

在这里插入图片描述


1. CommonJS

特点:

  • 定义方式: require()module.exports
  • 加载机制: 同步加载,适用于服务器端(如 Node.js)。
  • 用法:
    // 引入模块
    const fs = require('fs');
    // 导出模块
    module.exports = { key: 'value' };
    
  • 适用场景: Node.js 环境。
  • 缺点: 不适合浏览器,因为浏览器中同步加载会导致性能问题。

2. AMD(Asynchronous Module Definition)

特点:

  • 定义方式: define()require()
  • 加载机制: 异步加载,适合浏览器环境。
  • 用法:
    define(['moduleA', 'moduleB'], function (moduleA, moduleB) {
        return { key: 'value' };
    });
    
  • 适用场景: 浏览器环境,主要用于 RequireJS。
  • 优点: 异步加载减少阻塞。
  • 缺点: 语法复杂,冗长。

3. ESM(ECMAScript Modules)

特点:

  • 定义方式: importexport(原生 JavaScript 标准)。
  • 加载机制: 静态分析,浏览器和 Node.js 均支持(现代环境)。
  • 用法:
    // 导出
    export const value = 42;
    
    // 导入
    import { value } from './module.js';
    
  • 适用场景: 浏览器和 Node.js(type: module)。
  • 优点: 原生支持,性能好,支持静态分析。
  • 缺点: 老旧环境不支持,需要工具转译。

4. UMD(Universal Module Definition)

特点:

  • 定义方式: 同时兼容 CommonJS、AMD 和全局变量。
  • 加载机制: 同步或异步。
  • 用法:
    (function (root, factory) {
        if (typeof define === 'function' && define.amd) {
            // AMD
            define([], factory);
        } else if (typeof module === 'object' && module.exports) {
            // CommonJS
            module.exports = factory();
        } else {
            // 全局变量
            root.MyModule = factory();
        }
    }(this, function () {
        return { key: 'value' };
    }));
    
  • 适用场景: 希望兼容多个环境时使用。
  • 优点: 高兼容性。
  • 缺点: 实现复杂,现代环境逐渐减少使用。

5. SystemJS

特点:

  • 定义方式: 动态加载任意模块格式(ESM、AMD、CommonJS 等)。
  • 加载机制: 支持异步动态加载。
  • 用法:
    System.import('./module.js').then(module => {
        console.log(module);
    });
    
  • 适用场景: 混合模块格式的动态加载。
  • 优点: 灵活,兼容性强。
  • 缺点: 性能稍逊于 ESM,依赖 SystemJS 库。

对比总结(便于记忆)

模块系统加载方式环境支持优点缺点
CommonJS同步加载Node.js简单易用,服务器性能优越不适合浏览器
AMD异步加载浏览器异步高效,适合前端语法复杂
ESM静态加载浏览器 + Node原生支持,性能优越老旧环境需转译
UMD通用加载浏览器 + Node兼容多环境实现复杂
SystemJS动态加载浏览器 + Node支持多种模块系统性能不如原生支持的 ESM

类比记忆:

  • CommonJS:像“家庭厨房”,只用本地的(Node)。
  • AMD:像“外卖”,异步取回,适合前端。
  • ESM:像“官方配餐”,统一标准,浏览器和 Node 都能用。
  • UMD:像“自助餐”,适配各种口味。
  • SystemJS:像“万能食堂”,啥格式都能处理,但稍慢。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码简单说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值