Microbundle
零配置的 JavaScript/TypeScript 库打包工具,基于 Rollup 构建,专为小型模块设计
Microbundle 是基于 Rollup 的零配置 JS/TS 库打包工具,自动输出 CJS、ESM、UMD 三种格式,内置 Babel 转译和 Terser 压缩,专为小型模块和快速发布设计。
Microbundle
零配置的 JavaScript/TypeScript 库打包工具,基于 Rollup 构建,专为小型模块设计
技术简介说明
Microbundle 是一个零配置的 JavaScript 模块打包工具,由 Preact 作者 Jason Miller 创建。它的核心设计理念是"约定优于配置",开发者只需在 package.json 中声明入口和输出路径,无需编写复杂的配置文件即可完成库的打包。
该工具基于 Rollup 构建,自动集成了 Babel、Terser 等工具链,支持 ESNext、TypeScript、CSS Modules 等现代特性。Microbundle 会自动生成 CommonJS、ES Modules 和 UMD 三种格式的产物,满足不同的使用场景需求。
在 2020-2022 年间,Microbundle 是小型 JavaScript 库打包的主流选择之一。然而到 2025-2026 年,随着 tsup、unbuild、pkgroll 等新一代工具的崛起,Microbundle 的开发已趋于停滞,最后一次发布停留在 2022 年 8 月。
基本信息
- 官网:无独立官网
- GitHub:https://github.com/developit/microbundle
- License:MIT
- 最新版本:v0.15.1(2022 年 8 月 12 日发布)
- 主要维护者/公司:Jason Miller(developit)
- npm 下载量:约 8,134 个 GitHub Star,102 个未解决 issue
- 首次发布:2017 年
快速上手
安装
# 使用 npm
npm install --save-dev microbundle
# 使用 yarn
yarn add -D microbundle
# 使用 pnpm
pnpm add -D microbundle基础配置
在 package.json 中配置入口和输出:
{
"name": "my-library",
"version": "1.0.0",
"source": "src/index.js",
"main": "dist/index.cjs",
"module": "dist/index.module.js",
"unpkg": "dist/index.umd.js",
"scripts": {
"build": "microbundle",
"dev": "microbundle watch"
},
"devDependencies": {
"microbundle": "^0.15.1"
}
}最小示例
src/index.js
export function greet(name) {
return `Hello, ${name}!`;
}
export default { greet };构建命令
npm run build产物输出
dist/
├── index.cjs # CommonJS 格式
├── index.module.js # ESM 格式
├── index.umd.js # UMD 格式
└── index.cjs.map # Source maps
核心概念与架构
核心概念
- 零配置原则:通过约定优于配置的方式,自动识别项目结构和依赖关系
- 多格式输出:一次构建生成 CJS、ESM、UMD 三种格式,覆盖所有使用场景
- Modern 模式:针对支持
<script type="module">的现代浏览器生成更小的产物 - 自动外部化:根据
package.json中的dependencies和peerDependencies自动判断外部依赖 - 内置优化:默认启用 Babel 转译、Terser 压缩、Tree-shaking 等优化
架构设计
Microbundle
├── 输入解析层
│ ├── package.json 读取
│ ├── 入口文件识别
│ └── 依赖分析
│
├── 转换层
│ ├── Rollup 核心
│ ├── Babel 转译
│ ├── TypeScript 支持
│ └── CSS Modules 处理
│
└── 输出层
├── CJS 格式生成
├── ESM 格式生成
├── UMD 格式生成
└── Source Map 生成
工作原理
- 配置解析:读取
package.json中的source、main、module、unpkg字段 - 依赖分析:自动将
dependencies和peerDependencies标记为外部依赖 - 代码转译:通过 Babel 将 ESNext/TypeScript 转译为兼容代码
- 模块打包:Rollup 进行 Tree-shaking 和代码优化
- 产物生成:输出三种格式的压缩代码和 Source Map
核心特性
1. 零配置打包
无需 webpack.config.js 或 rollup.config.js,仅需 package.json 即可完成配置。
2. 多格式输出
自动生成三种模块格式:
- CommonJS:Node.js 环境使用
- ES Modules:现代打包工具使用
- UMD:浏览器和兼容环境使用
3. Modern 模式
在 package.json 中添加 exports 字段即可启用 Modern 模式,针对现代浏览器生成更小的产物:
{
"exports": {
".": "./dist/index.modern.mjs"
}
}Modern 模式保留 async/await、箭头函数、解构等现代语法,产物体积更小。
4. TypeScript 原生支持
零配置支持 TypeScript,自动识别 .ts 和 .tsx 文件:
{
"source": "src/index.ts"
}5. CSS Modules 支持
自动处理 CSS Modules,.module.css 文件会被自动识别:
import styles from './Button.module.css';6. 内置 Babel 转译
自动使用 Babel 转译现代 JavaScript,支持 async/await、装饰器等特性。
7. 属性混淆
通过 mangle.json 配置属性名混淆,减小包体积:
{
"mangle": {
"regex": "^_"
}
}8. 构建时常量注入
通过 CLI 注入构建时常量:
microbundle --define VERSION=2.0.0
microbundle --define API_KEY='abc123'9. Web Workers 支持
自动检测和打包 Web Workers:
const worker = new Worker(
new URL('./worker.js', import.meta.url),
{ type: 'module' }
);10. Bundle 可视化
使用 --visualize 生成产物分析报告:
microbundle --visualize
# 生成 stats.html生态图
核心依赖
Microbundle
├── Rollup # 模块打包核心
├── Babel # JavaScript 转译
├── Terser # 代码压缩
├── rollup-plugin-typescript2 # TypeScript 支持
└── postcss # CSS 处理
相关工具
- Preact:Microbundle 作者开发的 3KB React 替代品
- Rollup:底层打包引擎
- tsup:新一代 esbuild 驱动的库打包工具
- unbuild:UnJS 团队的 Rollup 打包工具
- pkgroll:基于 Rollup 的零配置打包器
社区生态
Microbundle 曾经拥有活跃的社区,但到 2026 年,社区已大幅转向新一代工具:
- npm 周下载量约 10 万+(2026 年数据)
- GitHub Star:8,134
- 未解决 Issue:102 个
- 最后发布:2022 年 8 月
适用场景
✅ 适合的场景
- 小型 JavaScript 库:单文件或少量文件的工具库
- 快速原型开发:无需配置即可打包发布
- Preact 生态项目:与 Preact 生态兼容性好
- UMD 包发布:需要生成 CDN 可用的 UMD 格式
- Legacy 项目维护:已有 Microbundle 项目的维护
- 简单 TypeScript 库:不需要复杂配置的 TS 库
- 教学项目:演示模块打包概念
❌ 不适合的场景
- 大型复杂项目:需要精细配置的大型库
- 现代 monorepo:需要 workspace 支持的项目
- 追求构建速度:esbuild 驱动的工具(如 tsup)更快
- 最新特性需求:Microbundle 已停止更新,无法支持新特性
- Node.js ESM 原生支持:需要现代 Node.js ESM 特性
开发与工程化
开发流程
1. 初始化项目
mkdir my-lib && cd my-lib
npm init -y
npm install --save-dev microbundle2. 配置 package.json
{
"name": "my-lib",
"version": "1.0.0",
"source": "src/index.js",
"main": "dist/index.cjs",
"module": "dist/index.module.js",
"unpkg": "dist/index.umd.js",
"scripts": {
"build": "microbundle",
"dev": "microbundle watch",
"prepublishOnly": "npm run build"
}
}3. 开发模式
npm run dev # 监听文件变化,自动重新构建4. 发布流程
npm run build
npm publish构建部署
CI/CD 集成(GitHub Actions)
name: Build and Publish
on:
push:
tags:
- 'v*'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18'
registry-url: 'https://registry.npmjs.org'
- run: npm ci
- run: npm run build
- run: npm publish
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}工程化最佳实践
- 使用
.npmignore:排除源码和开发文件 - 启用 Source Map:默认已启用,便于调试
- 配置
files字段:明确指定发布文件 - 使用
prepublishOnly:确保发布前自动构建 - 测试产物格式:在目标环境中验证 CJS/ESM/UMD
性能与安全
性能特点
构建速度
- 小型库(< 10 文件):1-3 秒
- 中型库(10-50 文件):3-10 秒
- 大型库(> 50 文件):10-30 秒
相比 tsup(esbuild 驱动),Microbundle 构建速度慢 5-10 倍。
产物大小
- 默认启用 Terser 压缩
- 自动 Tree-shaking 移除无用代码
- Modern 模式产物更小(保留现代语法)
- 示例:同一函数在 Modern 模式为 117 字节,标准 ESM 为 194 字节
优化建议
- 启用 Modern 模式:针对现代浏览器生成更小产物
- 配置属性混淆:使用
mangle.json压缩私有属性 - 合理使用外部依赖:避免将大型依赖打包进产物
- 使用
--compress控制压缩:Node 环境默认不压缩 - 分析产物:使用
--visualize找出体积瓶颈
安全注意事项
- 依赖审计:定期运行
npm audit检查依赖漏洞 - 外部依赖:避免将不可信依赖打包进产物
- Source Map:生产环境考虑是否发布 Source Map
- 构建时常量:避免注入敏感信息(如 API Key)
技术对比
与同类工具对比(2026 年)
| 特性 | Microbundle | tsup | unbuild | pkgroll | Rollup |
|---|---|---|---|---|---|
| 底层引擎 | Rollup | esbuild | Rollup | Rollup | Rollup |
| 构建速度 | 慢 | 极快 | 中等 | 中等 | 中等 |
| 配置复杂度 | 零配置 | 零配置 | 低配置 | 零配置 | 需配置 |
| TypeScript | ✅ 支持 | ✅ 原生 | ✅ 支持 | ✅ 支持 | ✅ 插件 |
| CSS Modules | ✅ 支持 | ❌ 不支持 | ✅ 插件 | ❌ 不支持 | ✅ 插件 |
| Modern 模式 | ✅ 支持 | ❌ 不支持 | ❌ 不支持 | ❌ 不支持 | ❌ 不支持 |
| UMD 输出 | ✅ 支持 | ✅ 支持 | ✅ 支持 | ✅ 支持 | ✅ 插件 |
| 维护状态 | ⚠️ 停滞 | ✅ 活跃 | ✅ 活跃 | ✅ 活跃 | ✅ 活跃 |
| 2026 最新版本 | 0.15.1 | 8.5.1 | 3.6.1 | 最新 | 4.x |
| 周下载量 | ~10 万 | ~120 万 | ~50 万 | ~20 万 | ~2000 万 |
优势
- ✅ 真正的零配置,开箱即用
- ✅ 自动生成三种格式
- ✅ Modern 模式产物更小
- ✅ CSS Modules 内置支持
- ✅ 属性混淆功能独特
劣势
- ❌ 构建速度慢(相比 tsup)
- ❌ 维护停滞,无新特性
- ❌ 社区活跃度下降
- ❌ 不支持 monorepo
- ❌ 缺乏现代 Node.js ESM 特性
最佳实践
生产环境配置
{
"name": "my-library",
"version": "1.0.0",
"source": "src/index.js",
"main": "dist/index.cjs",
"module": "dist/index.module.js",
"unpkg": "dist/index.umd.js",
"exports": {
".": {
"import": "./dist/index.module.js",
"require": "./dist/index.cjs",
"default": "./dist/index.module.js"
}
},
"files": [
"dist"
],
"scripts": {
"build": "microbundle --visualize",
"dev": "microbundle watch",
"prepublishOnly": "npm run build"
},
"devDependencies": {
"microbundle": "^0.15.1"
}
}TypeScript 项目配置
tsconfig.json
{
"compilerOptions": {
"module": "ESNext",
"target": "ESNext",
"moduleResolution": "node",
"declaration": true,
"strict": true
},
"include": ["src/**/*"]
}package.json
{
"source": "src/index.ts",
"types": "dist/index.d.ts"
}多入口配置
{
"source": [
"src/index.js",
"src/cli.js"
]
}外部依赖控制
# 将所有依赖标记为外部
microbundle --external all
# 指定外部依赖
microbundle --external react,react-dom
# 内联所有依赖
microbundle --external none技术局限与边界
已知限制
- 维护停滞:最后一次发布在 2022 年 8 月,无新特性开发
- 构建速度慢:基于 Rollup,比 esbuild 驱动的工具慢 5-10 倍
- 不支持 monorepo:无法处理 workspace 场景
- CSS Modules 类型支持:TypeScript + CSS Modules 存在已知问题
- Modern 模式局限:仅在支持
<script type="module">的环境可用 - 缺乏 ESM 原生支持:不支持 Node.js 原生 ESM 特性
- 依赖版本老旧:内部依赖(Rollup、Babel)版本较旧
不适用场景
- 新项目开发:推荐使用 tsup 或 unbuild
- 大型 monorepo:使用 Turborepo + tsup
- 追求构建速度:使用 tsup 或 esbuild
- 复杂打包需求:使用 Rollup 或 webpack
- 现代 Node.js 项目:使用 tsup 或 tsdown
学习资源
官方资源
- GitHub 仓库:https://github.com/developit/microbundle
- README 文档:详细的配置说明和示例
- 示例项目:GitHub Issues 中的实际案例
教程与指南
- 使用 Microbundle 打包 TypeScript 模块:https://codewithhugo.com/microbundle-typescript-npm-module/
- Microbundle 零配置打包指南:CSDN 博客
- 翻译:使用 microbundle 打包 TypeScript 组件库:掘金社区
社区资源
- GitHub Issues:查看已知问题和解决方案
- Reddit 讨论:r/javascript 社区的讨论
- Stack Overflow:搜索 microbundle 标签
替代方案文档
- tsup 文档:https://tsup.dev
- unbuild 文档:https://unbuild.unjs.io
- pkgroll 文档:https://github.com/privatenumber/pkgroll
2026 年现状
最新版本
- 版本号:v0.15.1
- 发布日期:2022 年 8 月 12 日
- 主要更新:
- 修复多个入口引用不同 CSS 时样式表丢失的问题
- 默认 Node 目标版本升级到 12
- 更新 rpt2 依赖修复 monorepo 问题
- 抑制
node:协议内置模块的警告 - 修复 ES 和 Modern 输出的文件名生成问题
发展趋势
维护状态
- 项目进入维护模式,无活跃开发
- 最后提交时间:约 5 个月前(截至 2026 年初)
- GitHub 活跃度评分:2.6/10(低活跃度)
社区迁移
- 2023-2024 年:社区开始迁移到 tsup 和 unbuild
- 2025-2026 年:tsup 成为事实标准,Microbundle 使用率持续下降
- npm 周下载量从高峰期下降约 60%
生态位变化
- 原定位:零配置库打包工具
- 现定位:Legacy 项目维护工具
- 新项目推荐:tsup、unbuild 或 pkgroll
未来路线图
官方路线图:无公开路线图,项目处于维护模式
社区建议
- Legacy 项目:继续使用 v0.15.1,无安全风险可忽略
- 新项目:迁移到 tsup 或 unbuild
- 迁移路径:
- 移除
microbundle依赖 - 安装
tsup - 调整
package.json配置 - 测试产物兼容性
- 移除
替代方案推荐
| 场景 | 推荐工具 | 理由 |
|---|---|---|
| 新项目 | tsup | 速度快、社区活跃、零配置 |
| 复杂项目 | unbuild | 输出优化好、Rollup 生态 |
| 简单项目 | pkgroll | 读取 package.json,零配置 |
| Legacy 维护 | Microbundle | 保持现有配置不变 |
总结
Microbundle 在 2017-2022 年间是小型 JavaScript 库打包的优秀选择,其"零配置"理念影响了后续工具的设计。然而到 2026 年,该项目已停止活跃开发,被 tsup、unbuild 等新一代工具取代。
对于新项目:推荐使用 tsup 或 unbuild,它们提供更快的构建速度、更活跃的社区和更现代的特性支持。
对于 Legacy 项目:Microbundle v0.15.1 仍然可用,但应制定迁移计划,逐步迁移到现代工具链。
对于学习:Microbundle 的源码仍是学习 Rollup 打包和零配置工具设计的良好参考。