Bun Build logo

Bun Build

Bun 运行时内置的高性能打包器,用 Zig 编写,比 esbuild 快 1.75 倍,支持全栈构建、单文件可执行产物和零配置前端开发。

打包工具BunZig全栈构建

Bun Build 是 Bun 运行时内置的 JavaScript/TypeScript 打包器,用 Zig 编写,深度集成运行时、包管理器和测试运行器,实现极致构建速度与全栈零配置开发体验。

Bun Build

Bun 运行时内置的高性能打包器,用 Zig 编写,比 esbuild 快 1.75 倍,支持全栈构建、单文件可执行产物和零配置前端开发。

技术简介说明

Bun Build 是 Bun 运行时内置的 JavaScript/TypeScript 打包器。它并非独立工具,而是与 Bun 的运行时、包管理器、测试运行器深度集成的"全合一"工具链核心组件。Bun Build 用 Zig 语言编写,架构设计参考了 esbuild,但通过将打包逻辑直接嵌入运行时(而非外部进程),消除了进程间通信开销,从而实现了极致的构建速度。

Bun Build 的定位不仅是"更快的 esbuild"——它试图重新定义前端构建范式。通过 HTML 文件导入、Bun.serve() 全栈开发服务器和零配置 HMR,Bun 将传统上需要 Webpack/Vite + 开发服务器 + 多个插件协同完成的工作,压缩到一条命令、零配置即可完成。它同时支持浏览器端(browser)、Bun 运行时(bun)和 Node.js(node)三种目标,可一次构建覆盖全栈。

截至 2026 年,Bun 已发展到 v1.3.x 系列,打包器在生产场景中逐步成熟,但仍处于快速迭代期。2025 年底 Oven(Bun 的母公司)被 Anthropic 收购,未来发展方向可能受到更大平台战略的影响。

基本信息

项目信息
官网https://bun.com/docs/bundler
GitHubhttps://github.com/oven-sh/bun
LicenseMIT(核心),部分组件为 Zig + C++ 混合许可
最新版本v1.3.14(2026 年 5 月 13 日发布)
主要维护者Oven (oven.sh),创始人 Jarred Sumner
编写语言Zig(正在向 Rust 重写迁移中)

快速上手

安装

# macOS / Linux
curl -fsSL https://bun.sh/install | bash
 
# Windows (PowerShell)
powershell -c "irm bun.sh/install.ps1 | iex"
 
# 通过 npm
npm install -g bun
 
# 验证安装
bun --version

基础配置

Bun Build 支持两种调用方式:CLIJavaScript API

CLI 方式:

# 基础打包
bun build ./src/index.ts --outdir ./dist
 
# 生产构建(启用压缩 + NODE_ENV=production)
bun build ./src/index.ts --outdir ./dist --production
 
# 指定目标
bun build ./src/index.ts --target=browser --outdir ./dist
 
# 监听模式
bun build ./src/index.ts --outdir ./dist --watch
 
# 编译为单文件可执行程序
bun build ./src/cli.ts --outfile mycli --compile

JavaScript API 方式:

const result = await Bun.build({
  entrypoints: ['./src/index.tsx'],
  outdir: './dist',
  target: 'browser',
  format: 'esm',
  splitting: true,
  minify: true,
  sourcemap: 'external',
});
 
if (!result.success) {
  console.error(result.logs);
  process.exit(1);
}

最小示例

// src/greet.ts
export function greet(name: string): string {
  return `Hello, ${name}!`;
}
 
// src/index.ts
import { greet } from './greet';
console.log(greet('Bun'));
bun build ./src/index.ts --outdir ./dist --production
# 输出: dist/index.js (压缩后的单文件)

核心概念与架构

架构设计

Bun Build 的架构基于以下核心原则:

  1. 运行时内嵌:打包器直接嵌入 Bun 运行时,不依赖外部进程。避免了 esbuild 需要 fork 子进程的 IPC 开销。
  2. Zig 编写:核心代码使用 Zig 语言,内存安全且无 GC 停顿,编译为高度优化的原生代码。
  3. JavaScriptCore 引擎:使用 Apple 的 JavaScriptCore(而非 V8),在启动速度和内存效率上有独特优势。
  4. esbuild 兼容设计:API 架构参考 esbuild,降低迁移成本。

工作原理

源文件 → 解析(Zig 原生解析器)
       → 依赖图构建
       → Tree Shaking(始终启用)
       → 代码转换(TS/JSX → JS)
       → 压缩(原生压缩器)
       → 产物输出(BuildArtifact,实现 Blob 接口)

BuildArtifact

打包产物类型为 BuildArtifact,实现了 Blob 接口,可直接用于 HTTP 响应:

const result = await Bun.build({ entrypoints: ['./app.ts'] });
// 直接作为 HTTP 响应返回
return new Response(result.outputs[0], {
  headers: { 'Content-Type': 'application/javascript' },
});

目标(Target)

目标说明
browser默认目标。优先使用 browser 导出条件,自动 polyfill Node 内置模块
bun面向 Bun 运行时。输出带 // @bun 注释跳过重复转译
node面向 Node.js。优先使用 node 导出条件,输出 .mjs

格式(Format)

格式状态说明
esm稳定(默认)支持顶层 await 和 import.meta
cjs实验性兼容 Bun 和 Node.js
iife实验性立即执行函数包装

核心特性

1. 极致构建速度

基于 esbuild 的 three.js 基准测试(10 份 three.js + sourcemap + 压缩):

工具相对速度
Bun1x(基准)
esbuild1.75x(比 Bun 慢)
Parcel 2150x
Rollup + Terser180x
Webpack220x

2. Tree Shaking 始终启用

无需配置,自动移除未使用代码。尊重 package.jsonsideEffects 字段、@__PURE__ 注释和环境变量。同时支持 ESM 和基础 CommonJS 的 tree shaking。

3. 全栈构建(Fullstack Build)

通过 HTML 文件导入 + Bun.serve() 实现前后端一体化构建:

import homepage from './index.html';
 
Bun.serve({
  routes: { '/': homepage },
  development: true,
});

自动处理 <script><link> 标签引用的资源,生成带哈希的产物 URL。

4. 条件编译(Features)

通过 bun:bundle 模块实现编译时死代码消除:

import { feature } from 'bun:bundle';
 
if (feature('PREMIUM')) {
  initPremiumFeatures(); // 当 PREMIUM 未启用时,整段代码被移除
}

5. 单文件可执行产物

bun build ./cli.ts --outfile mycli --compile

生成包含 Bun 运行时的独立可执行文件,无需目标机器安装 Node 或 Bun。

6. 字节码编译

await Bun.build({
  entrypoints: ['./app.ts'],
  target: 'bun',
  bytecode: true,
  compile: true,
});

将代码预编译为 .jsc 字节码,大幅缩短大型应用启动时间。

7. 多格式资源加载

文件类型处理方式
.ts / .tsx / .jsx原生转译,无需配置
.json / .jsonc / .toml / .yaml解析为 JS 对象内联
.css合并为单个 .css 文件
.html自动处理引用的脚本、样式和图片
.txt内联为字符串
.wasm / .node作为资源拷贝

8. 虚拟文件系统(files)

完全从内存构建项目,无需磁盘文件:

await Bun.build({
  entrypoints: ['/app/index.ts'],
  files: {
    '/app/index.ts': `import { greet } from './greet.ts'; console.log(greet('World'));`,
    '/app/greet.ts': `export function greet(name) { return 'Hello, ' + name; }`,
  },
});

9. 原生压缩器

支持细粒度控制:

minify: {
  whitespace: true,   // 压缩空白
  identifiers: true,  // 缩短标识符
  syntax: true,       // 语法优化
}

10. Metafile 产物分析

bun build ./src/index.ts --outdir ./dist --metafile ./dist/meta.json --metafile-md ./dist/meta.md

输出完整的依赖图、导入/导出信息和体积分析,可用于可视化打包分析。

生态图

关键依赖与集成

组件说明
Bun Runtime打包器与运行时深度集成,共享 JavaScriptCore 引擎
JavaScriptCoreApple 的 JS 引擎,替代 V8
Zig核心编写语言(正在向 Rust 迁移)
bunfig.tomlBun 的统一配置文件,影响打包、运行时、测试行为

插件生态

Bun Build 提供统一插件 API,生命周期钩子包括:

钩子用途
onStart()构建开始时执行
onResolve()拦截模块解析
onLoad()拦截文件加载,自定义转译
onBeforeParse()解析前的原生零拷贝扩展(Rust/C++)
onEnd()构建完成后处理结果

社区插件示例:

// Tailwind CSS 插件
// bunfig.toml
[serve.static]
plugins = ["bun-plugin-tailwind"]
bun add bun-plugin-tailwind tailwindcss

自定义插件:

const myPlugin: BunPlugin = {
  name: 'custom-loader',
  setup(build) {
    build.onLoad({ filter: /\.md$/ }, async (args) => {
      const text = await Bun.file(args.path).text();
      return {
        contents: `export default ${JSON.stringify(text)};`,
        loader: 'js',
      };
    });
  },
};

社区生态

项目说明
bun-plugin-*npm 上已有数十个社区插件
Bun Discord官方社区
GitHub Discussions活跃的技术讨论区

适用场景

1. 全栈 Web 应用

HTML 导入 + Bun.serve() 让前后端代码在单一构建命令中完成,特别适合中小规模全栈项目。

2. CLI 工具分发

--compile 编译为独立可执行文件,用户无需安装 Node.js 或 Bun,适合分发命令行工具。

3. Serverless / Edge 函数

极快的冷启动 + 小体积产物,适合 Lambda、Cloudflare Workers 等对启动延迟敏感的场景。

4. CI/CD 构建加速

替代 Webpack/esbuild 作为 CI 中的打包步骤,利用速度优势缩短构建流水线时间。

5. TypeScript/JSX 项目快速转译

零配置支持 TypeScript 和 JSX,无需额外安装 tsc@babel/preset-typescript 等工具。

6. Monorepo 开发

与 Bun 的 workspace 支持结合,为 monorepo 提供统一的构建、测试、运行体验。

7. 条件编译的产品变体

通过 features 条件编译,同一代码库构建免费/付费/企业版等不同产品变体。

开发与工程化

开发模式

// server.ts
import homepage from './index.html';
 
Bun.serve({
  routes: { '/': homepage },
  development: {
    hmr: true,      // 热模块替换
    console: true,  // 浏览器日志输出到终端
  },
});

生产构建

# 预编译构建(推荐)
bun build --target=bun --production --outdir=dist ./src/index.ts
 
# 运行
NODE_ENV=production bun dist/index.js

Docker 部署

FROM oven/bun:1 AS base
WORKDIR /app
 
FROM base AS install
COPY package.json bun.lockb ./
RUN bun install --frozen-lockfile
 
FROM base AS build
COPY --from=install /app/node_modules ./node_modules
COPY . .
RUN bun build --target=bun --production --outdir=dist ./src/index.ts
 
FROM base AS release
COPY --from=build /app/dist ./dist
EXPOSE 3000
CMD ["bun", "dist/index.js"]

CI/CD 集成

# GitHub Actions 示例
name: Build & Deploy
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: oven-sh/setup-bun@v2
        with:
          bun-version: latest
      - run: bun install --frozen-lockfile
      - run: bun run typecheck
      - run: bun build --production --outdir=dist ./src/index.ts
      - run: bun test

代码分割

await Bun.build({
  entrypoints: ['./src/page-a.ts', './src/page-b.ts'],
  splitting: true,  // 共享模块提取为独立 chunk
  outdir: './dist',
});

性能与安全

性能特点

维度说明
构建速度比 esbuild 快约 1.75 倍,比 Webpack 快两个数量级(three.js 基准)
依赖安装低至 115ms(v1.3.14),warm install 比 v1.2 快 7 倍
启动速度字节码编译可大幅缩短大型应用启动时间;tsc 启用字节码后启动快 2 倍
产物体积Tree shaking 始终启用,原生压缩器优化产物大小
HTTP 吞吐合成基准测试中 Bun HTTP 服务器达 Node.js 的 3-4 倍;实际应用中差距约 3%
冷启动Vercel Edge Functions 使用 Bun 后冷启动快 40%(2025 年中数据)

优化建议

  1. 启用代码分割splitting: true,共享模块自动提取,减少重复加载
  2. 使用条件编译features 标记移除不需要的功能代码
  3. optimizeImports:针对 antd、lodash-es 等 barrel 文件优化解析
  4. 字节码编译:对启动延迟敏感的应用启用 bytecode: true
  5. drop 选项:移除生产环境不需要的调试调用:drop: ['console', 'debugger']
  6. external 标记:大型依赖(如 react)通过 CDN 加载,减少产物体积

安全注意事项

关注点说明
环境变量泄露env: "inline" 会将所有环境变量内联到产物中,应使用 "PREFIX_*" 只暴露公开变量
依赖安全Bun 的包管理器兼容 npm 生态,需自行审计依赖安全性
代码执行单文件可执行产物包含完整运行时,需确保分发渠道安全

技术对比

Bun Build vs esbuild

维度Bun Buildesbuild
速度比 esbuild 快 1.75x基准
语言ZigGo
集成度内嵌运行时,无需额外安装独立工具,需单独安装
API 兼容性兼容 esbuild API(有差异)原生 API
开发服务器内置(Bun.serve()无,需配合其他工具
HMR内置
插件生态新兴,较少较少但稳定
格式支持esm(稳定)、cjs/iife(实验性)esm/cjs/iife(稳定)
CSS 支持有,支持 chunking无原生 CSS 打包
HTML 处理有,自动处理引用资源
目标平台browser / bun / nodebrowser / node / neutral

Bun Build vs Vite

维度Bun BuildVite
定位全合一运行时打包器前端开发框架/构建工具
底层引擎Zig 原生esbuild(dev)+ Rollup(prod)
开发体验零配置 HMR + 全栈成熟的 HMR + 丰富插件
插件生态新兴极其丰富(Rollup 插件兼容)
SSR实验性(React Server Components)成熟支持
框架集成通用Vue/React/Svelte 等深度优化
生产打包内置Rollup

Bun Build vs Webpack

维度Bun BuildWebpack
速度快 220x基准
成熟度较新极其成熟
插件数量数十个数万个
配置复杂度几乎零配置配置复杂但灵活
边缘场景部分不支持几乎全部覆盖
学习曲线
Module Federation不支持支持
缓存策略内容哈希丰富(memory/filesystem 等)

对比总结

场景推荐
极致构建速度Bun Build
成熟前端开发Vite / Webpack
复杂企业项目Webpack
库/SDK 发布Rollup
全栈零配置Bun Build
CLI 工具分发Bun Build
CI 构建加速Bun Build / esbuild

最佳实践

1. 环境变量管理

// 推荐:只暴露公开变量
await Bun.build({
  entrypoints: ['./src/index.ts'],
  env: 'PUBLIC_*',  // 仅内联 PUBLIC_ 前缀的变量
  outdir: './dist',
});

2. Barrel 文件优化

// 针对 antd/lodash 等重导出文件优化
await Bun.build({
  entrypoints: ['./src/index.ts'],
  optimizeImports: ['antd', '@mui/material', 'lodash-es'],
  outdir: './dist',
});

package.json 中有 "sideEffects": false 时,该优化自动启用。

3. 生产环境构建配置

await Bun.build({
  entrypoints: ['./src/server.ts'],
  target: 'bun',
  format: 'esm',
  minify: {
    whitespace: true,
    identifiers: true,
    syntax: true,
  },
  sourcemap: 'external',
  splitting: true,
  drop: ['console', 'debugger'],
  outdir: './dist',
});

4. 多入口 + 代码分割

await Bun.build({
  entrypoints: [
    './src/pages/home.ts',
    './src/pages/dashboard.ts',
    './src/pages/settings.ts',
  ],
  splitting: true,
  naming: {
    entry: '[dir]/[name]-[hash].[ext]',
    chunk: 'chunks/[name]-[hash].[ext]',
  },
  outdir: './dist',
});

5. 单文件 CLI 分发

bun build ./src/cli.ts \
  --outfile mycli \
  --compile \
  --windows-hide-console \
  --windows-icon ./icon.ico

6. 文件命名策略

await Bun.build({
  entrypoints: ['./src/index.ts'],
  naming: {
    entry: '[dir]/[name]-[hash].[ext]',
    chunk: '[name]-[hash].[ext]',
    asset: 'assets/[name]-[hash].[ext]',
  },
  publicPath: 'https://cdn.example.com/',
  outdir: './dist',
});

技术局限与边界

已知限制

限制说明
CJS 输出实验性format: "cjs" 仍为实验性,部分场景可能有问题
IIFE 输出实验性format: "iife"globalNames 等高级选项尚不完善
插件生态不成熟相比 Webpack/Vite 插件数量极少,复杂场景需自行实现
Module Federation 不支持无法像 Webpack 5 那样实现微前端模块联邦
部分 npm 兼容性npm 兼容率约 92%,某些边缘包可能不兼容
无内置 SSR全栈模式无内建服务端渲染(React Server Components 为实验性)
API 路由无自动发现需手动注册路由,不支持文件系统路由自动发现
语法不降级不做语法降级(如 async/await → generators),仅转译 TS/JSX

不适用场景

  1. 需要 Module Federation 的微前端架构 → 使用 Webpack 5
  2. 需要数万个插件覆盖的边缘场景 → 使用 Webpack
  3. 纯库/SDK 发布且需要极致产物优化 → 使用 Rollup
  4. 需要成熟 SSR 的复杂前端应用 → 使用 Next.js + Vite/Webpack
  5. 需要语法降级到旧浏览器 → Bun 不做语法降级,需配合其他工具
  6. 生产环境要求绝对稳定 → Bun 仍在快速迭代,API 可能变更

学习资源

官方资源

教程与文章

资源说明
The Bun Bundler (官方博客)Bun 打包器发布说明与架构介绍
Bun in 2025: Critical Evaluation2025 年 Bun 成熟度评估
The Practical Guide to Bun in Production生产环境实战指南
Turbopack, Vite, Bun Bundler and the Next-Gen Tooling Race下一代构建工具竞争格局分析
JavaScript 2026: The New Era2026 年 JS 生态全景

2026 年现状

最新版本:v1.3.14(2026 年 5 月)

v1.3.x 系列重要里程碑:

版本发布时间关键特性
v1.3.142026-05Bun.Image 图像处理 API、HTTP/3 支持、依赖安装低至 115ms
v1.3.122026-04Bun.WebView 原生无头浏览器自动化
v1.3.112026-03Bun.cron 定时任务支持
v1.3.102026-02REPL 完全用 Zig 重写
v1.3.62025-12Bun.Archive tar/gzip API
v1.3.02025-10统一 SQL API、内置 Redis 客户端、包目录、零配置前端开发
v1.2.02025-01Bun Bake 实验性全栈框架

发展趋势

  1. Rust 重写迁移:v1.3.14 可能是最后一个完全使用 Zig 的版本。Jarred Sumner 已表示如果 Rust 重写完成并合并,未来将切换到 Rust。
  2. Anthropic 收购:Oven 于 2025 年 12 月被 Anthropic 收购,Bun 的未来发展方向可能受到 Anthropic 平台战略的影响。
  3. 全栈一体化:Bun 正朝着"一个工具覆盖全栈开发"的方向演进,Bun.serve() + HTML 导入 + React Server Components 是核心路径。
  4. 运行时能力持续扩展:从 v1.3.x 可见,Bun 不断内置新能力(Image、WebView、Cron、SQL、Redis),减少对外部依赖的需求。
  5. 社区采用率:Reddit 和 HN 讨论显示,部分开发者已在生产环境使用 Bun,但主流采用仍受制于兼容性担忧和生态成熟度。

未来路线图(已知/推测)

  • bun build CLI 完整支持全栈应用构建
  • 文件系统路由自动发现(API 路由)
  • 内建 SSR 支持
  • Rust 重写完成后性能进一步提升
  • 更丰富的插件生态
  • 与 Anthropic 生态(Claude 等)的深度集成可能性