前端模块化规范总结对比:
前端模块化规范主要包括 ES Modules(现代标准)、***monJS(Node.js 传统)、AMD(异步浏览器模块,使用 define定义模块,require加载模块)、UMD(通用兼容)、以及框架特定的模块组织方式。其中,ES Modules 是当前的主流和未来标准,推荐在新项目中优先使用。
| 特性 | ESModule (ESM) | ***monJS |
|---|---|---|
| 导入导出语法 |
import { x } from 'module' / export
|
const x = require('module') / module.exports
|
| 模块化方式 | 静态模块化,支持树摇(Tree Shaking) | 动态模块化,按需加载 |
| 加载方式 | 异步加载,适用于浏览器和 Node.js | 同步加载,主要用于 Node.js |
| 兼容性 | 支持现代浏览器和 Node.js(通过 .mjs 或 "type": "module") |
主要用于 Node.js |
| 默认导出 | export default |
module.exports = |
| 支持动态导入 |
import() 动态导入 |
不支持动态导入 |
| 循环依赖 | 静态解析,避免重复加载 | 在运行时处理循环依赖,返回部分加载模块 |
使用场景:
-
ESModules 是现代的标准模块化方案,推荐用于前端开发以及支持
ESM的 Node.js 环境。 -
***monJS 主要用于 Node.js 环境,尤其适合传统的服务器端模块。
1. Import vs Require
ESM 使用 import 和 export来导入和导出模块,而 ***monJS 使用 require 和 module.export。