Skip to content

什么是模块化

把复杂的代码按照功能的不同划分成不同的模块单独维护,提高开发效率,降低维护成本。

模块化规范

CommonJS 规范

一个文件就是一个模块 每个模块都有单独的作用域。
它使用 require 函数导入模块,使用 module.exports 或 exports 导出模块。
优点: 同步模式加载模块,node 执行机制时启动时加载模块,执行过程中不需要加载,在 node 可以直接使用
缺点: 在浏览器端页面加载会导致大量同步请求出现,效率较低
js
// 导入模块
const moduleA = require('./moduleA')

// 导出模块
module.exports = {
  // 模块内容
}

AMD Asynchronous module definition 异步模块定义规范

AMD 是一种用于浏览器端 JavaScript 的模块化规范,用于异步加载模块。
它使用 define 函数定义模块,使用 require 函数异步加载模块。
js
// 定义模块
define(['dependency1', 'dependency2'], function (dep1, dep2) {
  // 模块内容
  return {
    // 导出的内容
  }
})

// 异步加载模块
require(['moduleA'], function (moduleA) {
  // 模块加载完成后的回调
})

UMD Universal Module Definition

UMD 是一种通用的模块化规范,兼容 CommonJS、AMD 和全局变量(Global)环境。
它可以在不同的环境中使用不同的模块化规范,以便在各种环境下使用。
js
;(function (root, factory) {
  if (typeof define === 'function' && define.amd) {
    // AMD 环境
    define(['dependency1', 'dependency2'], factory)
  } else if (typeof module === 'object' && module.exports) {
    // CommonJS 环境
    module.exports = factory(require('dependency1'), require('dependency2'))
  } else {
    // 全局变量环境
    root.myModule = factory(root.dependency1, root.dependency2)
  }
})(this, function (dep1, dep2) {
  // 模块内容
  return {
    // 导出的内容
  }
})

ES Modules(ESM

ES Modules 是 ECMAScript 2015(ES6)引入的官方模块化规范,用于浏览器端和现代化的 Node.js 环境。
它使用 import 和 export 关键字导入和导出模块。
js
// 导入模块
import moduleA from './moduleA'

// 导出模块
export default {
  // 模块内容
}