Microbundle logo

Microbundle

零配置的 JavaScript/TypeScript 库打包工具,基于 Rollup 构建,专为小型模块设计

打包工具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 月。

基本信息

  • 官网:无独立官网
  • GitHubhttps://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

核心概念与架构

核心概念

  1. 零配置原则:通过约定优于配置的方式,自动识别项目结构和依赖关系
  2. 多格式输出:一次构建生成 CJS、ESM、UMD 三种格式,覆盖所有使用场景
  3. Modern 模式:针对支持 <script type="module"> 的现代浏览器生成更小的产物
  4. 自动外部化:根据 package.json 中的 dependenciespeerDependencies 自动判断外部依赖
  5. 内置优化:默认启用 Babel 转译、Terser 压缩、Tree-shaking 等优化

架构设计

Microbundle
    ├── 输入解析层
    │   ├── package.json 读取
    │   ├── 入口文件识别
    │   └── 依赖分析
    │
    ├── 转换层
    │   ├── Rollup 核心
    │   ├── Babel 转译
    │   ├── TypeScript 支持
    │   └── CSS Modules 处理
    │
    └── 输出层
        ├── CJS 格式生成
        ├── ESM 格式生成
        ├── UMD 格式生成
        └── Source Map 生成

工作原理

  1. 配置解析:读取 package.json 中的 sourcemainmoduleunpkg 字段
  2. 依赖分析:自动将 dependenciespeerDependencies 标记为外部依赖
  3. 代码转译:通过 Babel 将 ESNext/TypeScript 转译为兼容代码
  4. 模块打包:Rollup 进行 Tree-shaking 和代码优化
  5. 产物生成:输出三种格式的压缩代码和 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 月

适用场景

✅ 适合的场景

  1. 小型 JavaScript 库:单文件或少量文件的工具库
  2. 快速原型开发:无需配置即可打包发布
  3. Preact 生态项目:与 Preact 生态兼容性好
  4. UMD 包发布:需要生成 CDN 可用的 UMD 格式
  5. Legacy 项目维护:已有 Microbundle 项目的维护
  6. 简单 TypeScript 库:不需要复杂配置的 TS 库
  7. 教学项目:演示模块打包概念

❌ 不适合的场景

  1. 大型复杂项目:需要精细配置的大型库
  2. 现代 monorepo:需要 workspace 支持的项目
  3. 追求构建速度:esbuild 驱动的工具(如 tsup)更快
  4. 最新特性需求:Microbundle 已停止更新,无法支持新特性
  5. Node.js ESM 原生支持:需要现代 Node.js ESM 特性

开发与工程化

开发流程

1. 初始化项目

mkdir my-lib && cd my-lib
npm init -y
npm install --save-dev microbundle

2. 配置 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 }}

工程化最佳实践

  1. 使用 .npmignore:排除源码和开发文件
  2. 启用 Source Map:默认已启用,便于调试
  3. 配置 files 字段:明确指定发布文件
  4. 使用 prepublishOnly:确保发布前自动构建
  5. 测试产物格式:在目标环境中验证 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 字节

优化建议

  1. 启用 Modern 模式:针对现代浏览器生成更小产物
  2. 配置属性混淆:使用 mangle.json 压缩私有属性
  3. 合理使用外部依赖:避免将大型依赖打包进产物
  4. 使用 --compress 控制压缩:Node 环境默认不压缩
  5. 分析产物:使用 --visualize 找出体积瓶颈

安全注意事项

  1. 依赖审计:定期运行 npm audit 检查依赖漏洞
  2. 外部依赖:避免将不可信依赖打包进产物
  3. Source Map:生产环境考虑是否发布 Source Map
  4. 构建时常量:避免注入敏感信息(如 API Key)

技术对比

与同类工具对比(2026 年)

特性MicrobundletsupunbuildpkgrollRollup
底层引擎RollupesbuildRollupRollupRollup
构建速度极快中等中等中等
配置复杂度零配置零配置低配置零配置需配置
TypeScript✅ 支持✅ 原生✅ 支持✅ 支持✅ 插件
CSS Modules✅ 支持❌ 不支持✅ 插件❌ 不支持✅ 插件
Modern 模式✅ 支持❌ 不支持❌ 不支持❌ 不支持❌ 不支持
UMD 输出✅ 支持✅ 支持✅ 支持✅ 支持✅ 插件
维护状态⚠️ 停滞✅ 活跃✅ 活跃✅ 活跃✅ 活跃
2026 最新版本0.15.18.5.13.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

技术局限与边界

已知限制

  1. 维护停滞:最后一次发布在 2022 年 8 月,无新特性开发
  2. 构建速度慢:基于 Rollup,比 esbuild 驱动的工具慢 5-10 倍
  3. 不支持 monorepo:无法处理 workspace 场景
  4. CSS Modules 类型支持:TypeScript + CSS Modules 存在已知问题
  5. Modern 模式局限:仅在支持 &lt;script type="module"&gt; 的环境可用
  6. 缺乏 ESM 原生支持:不支持 Node.js 原生 ESM 特性
  7. 依赖版本老旧:内部依赖(Rollup、Babel)版本较旧

不适用场景

  1. 新项目开发:推荐使用 tsup 或 unbuild
  2. 大型 monorepo:使用 Turborepo + tsup
  3. 追求构建速度:使用 tsup 或 esbuild
  4. 复杂打包需求:使用 Rollup 或 webpack
  5. 现代 Node.js 项目:使用 tsup 或 tsdown

学习资源

官方资源

教程与指南

社区资源

  • GitHub Issues:查看已知问题和解决方案
  • Reddit 讨论:r/javascript 社区的讨论
  • Stack Overflow:搜索 microbundle 标签

替代方案文档

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

未来路线图

官方路线图:无公开路线图,项目处于维护模式

社区建议

  1. Legacy 项目:继续使用 v0.15.1,无安全风险可忽略
  2. 新项目:迁移到 tsup 或 unbuild
  3. 迁移路径
    • 移除 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 打包和零配置工具设计的良好参考。