什么是模块化
把复杂的代码按照功能的不同划分成不同的模块单独维护,提高开发效率,降低维护成本。
模块化规范
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 {
// 模块内容
}