核心工具链打包器

打包器

使用 bun build 为浏览器、Bun 或 Node.js 生成可部署产物

最后更新于

先确认是否需要打包

  • 直接运行服务端 TypeScript:通常可用 bun run,不必先 bundle。
  • 浏览器代码:需要打包、拆分和静态资源处理。
  • 发布单文件 CLI / 服务:bundle 可简化分发,但要确认外部依赖和动态文件。
  • 框架项目:优先使用框架官方构建命令,除非框架明确支持 Bun bundler。

CLI 示例

bun build ./src/index.ts --outdir ./dist --target bun
bun build ./src/browser.tsx --outdir ./dist --target browser --splitting
bun build ./src/cli.ts --outfile ./dist/cli.js --target node --minify --sourcemap

JavaScript API

const result = await Bun.build({
  entrypoints: ['./src/index.ts'],
  outdir: './dist',
  target: 'bun',
  minify: true,
  sourcemap: 'linked',
});

if (!result.success) {
  for (const log of result.logs) console.error(log);
  process.exit(1);
}

target 决策

产物运行在哪里target注意
浏览器browser不得泄露服务端环境变量和密钥
Bunbun可以保留 Bun 特有 API
Node.jsnode不要在源码中依赖 Bun.*

外部依赖

不希望某些包进入 bundle 时,把它们标记为 external,并确保部署环境能安装或提供这些包。包含原生二进制、运行时动态加载或按平台分发的依赖尤其需要验证。

单文件可执行程序

CLI、Agent 工具或固定平台的小型服务可以编译成独立程序:

bun build src/index.ts \
  --compile \
  --target=bun-linux-x64 \
  --outfile=dist/service

交叉编译不等于目标平台验证。动态库、CA 证书、时区数据、子进程、外部文件和原生依赖仍应在目标 OS/CPU 上启动和测试;签名、SBOM 与发布校验也由项目负责。

发布检查

bun build ./src/index.ts --outdir ./dist --target bun --sourcemap
bun ./dist/index.js

至少在与生产相同的操作系统、架构和 Bun 版本上运行一次产物。不要只以“构建成功”代替运行验证。

官方参考:BundlerSingle-file executables