程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • HTML

  • CSS

  • JavaScript

    • 简介和用法
    • 变量和数据类型
    • 运算符
    • 数据类型转换
    • 选择结构
    • 循环结构
    • 数组
    • 数组遍历
    • 函数
    • Debug调试
    • DOM
    • 事件处理
    • BOM(浏览器对象模型)
    • 自定义对象
    • 原型 (Prototype)
    • 内置对象
    • 客户端存储
    • 模块加载方案
    • 前端三剑客
    • JavaScript
    scholar
    2024-07-28
    目录

    模块加载方案

    在 ES6 之前,JavaScript 社区主要使用两种模块加载方案:CommonJS 和 AMD。它们分别针对服务器端和浏览器端的模块化需求。以下是对这两种方案的详细总结,包括它们的语法和用法。

    # 1. CommonJS

    CommonJS 规范主要用于服务器端,Node.js 是其主要的实现者。CommonJS 模块通过require和module.exports进行加载和导出。

    # 语法

    1. 导出模块:使用module.exports或exports。
    2. 导入模块:使用require。

    # 用法

    定义模块

    // math.js
    // 定义一个包含加法和减法函数的模块
    
    // 定义加法函数
    const add = (a, b) => a + b;
    
    // 定义减法函数
    const subtract = (a, b) => a - b;
    
    // 使用 module.exports 导出模块
    module.exports = {
      add,
      subtract
    };
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14

    使用模块

    // main.js
    // 通过 require 引入 math 模块
    
    // 引入 math 模块
    const math = require('./math');
    
    // 调用 math 模块中的 add 函数
    console.log(math.add(2, 3)); // 输出 5
    
    // 调用 math 模块中的 subtract 函数
    console.log(math.subtract(5, 3)); // 输出 2
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

    在上面的示例中,math.js 文件定义了一个模块,通过module.exports导出了两个函数add和subtract。在main.js文件中,使用require引入这个模块并调用其方法。

    # 2. AMD

    AMD(Asynchronous Module Definition)主要用于浏览器端,它通过异步加载模块,解决了在浏览器环境中模块加载的效率问题。RequireJS 是 AMD 的主要实现者。

    # 语法

    1. 定义模块:使用define函数。
    2. 导入模块:使用require函数。

    # 用法

    定义模块

    // math.js
    // 使用 define 函数定义一个模块
    
    define(function() {
      // 返回一个包含 add 和 subtract 方法的对象
      return {
        // 定义加法函数
        add: function(a, b) {
          return a + b;
        },
        // 定义减法函数
        subtract: function(a, b) {
          return a - b;
        }
      };
    });
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16

    使用模块

    // main.js
    // 使用 require 函数引入并使用 math 模块
    
    // 使用 require 函数异步加载 math 模块
    require(['math'], function(math) {
      // 调用 math 模块中的 add 函数
      console.log(math.add(2, 3)); // 输出 5
    
      // 调用 math 模块中的 subtract 函数
      console.log(math.subtract(5, 3)); // 输出 2
    });
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

    在上面的示例中,math.js 文件使用 define 函数定义了一个模块,并返回一个包含add和subtract方法的对象。在 main.js 文件中,使用 require 函数异步加载 math 模块,并在回调函数中调用其方法。

    # 3. CommonJS 和 AMD 的对比

    1. 同步与异步:

      • CommonJS:同步加载模块,适合服务器端的模块加载。
      • AMD:异步加载模块,适合浏览器端的模块加载。
    2. 加载机制:

      • CommonJS:模块在加载时立即执行。
      • AMD:模块在加载时不会立即执行,而是加载完成后再执行回调。
    3. 兼容性:

      • CommonJS:主要用于 Node.js 环境。
      • AMD:主要用于浏览器环境,RequireJS 是其主要实现。
    4. 导出方式:

      • CommonJS:使用 module.exports 或 exports 导出模块。
      • AMD:使用 define 函数定义和导出模块。
    5. 引入方式:

      • CommonJS:使用 require 函数同步引入模块。
      • AMD:使用 require 函数异步引入模块。

    总结

    在 ES6 之前,JavaScript 的模块化主要依赖于 CommonJS 和 AMD 两种方案。CommonJS 适用于服务器端,提供了简单直观的模块化方式;AMD 适用于浏览器端,通过异步加载提高了性能。ES6 的模块化方案结合了两者的优点,提供了统一的模块化标准,解决了之前存在的各种问题。

    编辑此页 (opens new window)
    上次更新: 2025/01/25, 22:32:05
    客户端存储

    ← 客户端存储

    Theme by Vdoing | Copyright © 2019-2025 程序员scholar
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式