Node.js 模块系统
CommonJS:Node 模块规范,默认格式- 导入:
require- 运行时动态加载:代码执行到 require 时同步加载
- 加载缓存:同一模块后续 require 使用缓存、不重新加载
- 条件加载:可以在条件语句中调用 require
- 导出:
module.exports- 导出值的拷贝,修改原文件的值不会更新
- 不支持顶层 await
- 导入:
ESM:现代化浏览器 + Node 模块规范,原生支持,推荐使用- 导入:
import/import()- 编译时静态分析:构建工具可以静态分析依赖树、实现 Tree-Shaking
- 动态导入:使用 import() 动态导入依赖、返回 Promise
- 导出:
export- 导出值的实时绑定,修改值会更新
- 支持顶层 await
- 导入:
AMD:浏览器异步加载,已过时UMD:库打包兼容 CJS/AMD,已过时
开发时推荐使用 ESM + TS:
json
// tsconfig.json
{
"compilerOptions": {
"module": "NodeNext",
"moduleResolution": "NodeNext"
}
}打包库时输出 ESM + CJS 双格式。