bun

2025-12-21

前端

时间就象海绵里的水一样,只要你愿意挤,总还是有的。——鲁迅

Bun 全面上手:Zig 打造的全能 JavaScript/TypeScript 工具链,一行命令跑起你的全栈应用

仓库地址:oven-sh/bun
官方文档与指南:bun.com/docs
简介:Bun 是一个“一体化”的 JavaScript/TypeScript 应用工具链,单一可执行文件 bun 即可同时充当运行时、包管理器、测试运行器与打包器,目标是成为 Node.js 的“即可替换”运行时。


为什么是 Bun?

来自官方 README 的定义:

  • Bun 是一个全能(all-in-one)工具集,单一可执行文件 bun
  • 核心是一个高速运行时,以 Zig 编写,底层由 JavaScriptCore 驱动。
  • 设计目标:在尽可能多的场景下,直接替换 Node.js 使用。
  • 开箱支持 TypeScript 与 JSX;内置测试、脚本运行和Node 兼容的包管理器

一句话概括:有了 Bun,你可以更少的依赖、更短的启动链路、更快的开发/运行体验,把“常见的 Node.js 生态工作”统一进一条命令。


安装与升级

Bun 支持 Linux(x64/arm64)、macOS(x64/Apple Silicon)与 Windows(x64)。官方推荐使用安装脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 推荐方式(脚本安装)
curl -fsSL https://bun.com/install | bash

# Windows(PowerShell)
powershell -c "irm bun.sh/install.ps1 | iex"

# npm 全局安装
npm install -g bun

# Homebrew
brew tap oven-sh/bun
brew install bun

# Docker
docker pull oven/bun
docker run --rm --init --ulimit memlock=-1:-1 oven/bun

升级到最新稳定版:

1
bun upgrade

升级到最新 canary(每次主分支提交都会生成 canary):

1
bun upgrade --canary

Linux 用户建议内核版本 ≥ 5.6(最低 5.1);x64 CPU 如遇“非法指令”等,请参考文档的 CPU 要求


Bun 到底能做什么?

官方 README 概述了四个核心能力:

  • 运行时(Runtime):直接跑 TS/JS/JSX,内置大量 Web/Node 兼容 API
  • 包管理器(Package Manager):bun install/add/remove/update 等全套指令
  • 测试运行器(Test Runner):bun test 支持快照、Mock、覆盖率等常见能力
  • 打包器(Bundler):Bun.build 提供打包、插件、HMR、单文件可执行等特性

这意味着你可以将“开发、测试、打包、部署”完整流程压缩到 Bun 一套工具里完成。


快速开始:一行命令跑起来

Bun 的 CLI 非常简单直观:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 直接运行 TS/JSX
bun run index.tsx

# 测试
bun test

# 运行 package.json 中的脚本
bun run start

# 安装依赖
bun install <pkg>

# 执行包(类似 npx)
bunx cowsay 'Hello, world!'

代码案例 1:最简 HTTP 服务

Bun 提供了原生的 HTTP 服务 API Bun.serve。以下是一个最小可用示例:

1
2
3
4
5
6
7
8
9
// server.ts
const server = Bun.serve({
port: 3000,
fetch(req) {
return new Response("Hello Bun!");
},
});

console.log(`HTTP server is running at http://localhost:${server.port}`);

运行它:

1
bun run server.ts

文档中还涵盖了 TLS 配置、热重载、集群与流式响应等更深入的玩法,参见“HTTP Guides”。


代码案例 2:内置测试(bun:test)

Bun 自带测试运行器,支持快照、Mock、覆盖率、DOM 测试等常用特性。示例:

1
2
3
4
5
6
7
8
9
10
// sum.test.ts
import { test, expect } from "bun:test";

function sum(a: number, b: number) {
return a + b;
}

test("sum adds two numbers", () => {
expect(sum(1, 2)).toBe(3);
});

运行测试:

1
bun test

可配合 watch、生命周期钩子、报告器等高级能力,具体见“Test runner”文档。


代码案例 3:打包(Bun.build)

Bun 的打包器内置于运行时,提供 Loader、插件、宏、HMR、CSS/HTML 支持等。以下是一个最简单的打包示例:

1
2
3
4
5
6
7
8
9
10
11
12
// build.ts
const result = await Bun.build({
entrypoints: ["src/index.ts"],
outdir: "dist",
});

if (!result.success) {
console.error("Build failed!", result);
process.exit(1);
}

console.log("Build succeeded:", result.outputs.map(o => o.path));

运行:

1
bun run build.ts

你也可以结合插件与宏进行更复杂的构建流程;文档提供了与 esbuild 的对比与迁移建议。


代码案例 4:“$ Shell”在 Bun 中的用法

Bun 扩展了一个优雅的“命令调用”能力($ Shell),可用模板字符串调用系统命令,适合编写自动化脚本:

1
2
3
4
5
6
7
8
import { $ } from "bun";

// 执行命令并打印输出
await $`echo "Hello from Bun shell!"`;

// 将命令输出赋值到变量
const { stdout } = await $`node -v`;
console.log("Node version:", stdout.toString().trim());

包管理与工作区(Workspaces)

Bun 内置了完整的包管理器指令与功能:

  • 常用 CLI:bun install/add/remove/update/link/unlink/outdated/publish
  • 工作区(Workspaces)与锁文件(Lockfile)
  • 支持 registry 配置与覆盖、生命周期脚本、过滤安装(Filter)
  • 与 npm/yarn 生态兼容,支持 bun pm.npmrc

示例(安装依赖并运行脚本):

1
2
bun install
bun run start

Docker 与部署

官方提供了 Docker 镜像与相关指南,方便将 Bun 应用打包到容器中:

1
2
docker pull oven/bun
docker run --rm --init --ulimit memlock=-1:-1 oven/bun

文档中有与 Render、systemd、PM2 的结合方式,以及多种前端框架(React/Next.js/SvelteKit/Nuxt/Astro 等)的实践指南。


与 Node.js 的兼容性

README 明确指出 Bun 旨在成为 Node.js 的即可替换运行时,并在文档中列出了 Node.js 兼容性说明与 API 对应关系。
常见 Node API(如 fspathBuffer 等)的基础能力在 Bun 中可直接使用,同时也提供了许多 Bun 特有的扩展(如 Bun.fileBun.Transpilerbun:sqliteBun.sqlBun.redis 等)。

迁移建议:从 bun runbun install 等基础命令开始,将测试迁移到 bun test,再逐步替换打包链路为 Bun.build,最终考虑全面切换运行时。


常用入口与文档目录

为便于进一步学习与查阅,官方 README 给出了清晰的目录与链接(节选):

  • Quickstart / 安装 / TypeScript / JSX
  • CLI(bun initbun createbun upgrade
  • Runtime(加载器、环境变量、插件、热重载、Module 解析、auto-install、bunfig.toml、调试)
  • Package Manager(安装/更新/发布、缓存、工作区、生命周期脚本、锁文件、registry)
  • Bundler(Bun.build、Loader、插件、宏、HMR、单文件可执行、CSS/HTML)
  • Test Runner(写测试、快照、Mock、覆盖率、Reporter、DOM 测试、配置)
  • API(Bun.serve、WebSocket、Workers、文件与流、SQLite/Postgres/Redis/S3、TCP/UDP 等)
  • Guides(覆盖二进制/HTTP/生态/安装/运行时/流/测试/工具等各类场景)

完整入口请访问:bun.com/docs


总结

Bun 把“写、测、打、跑”四件事合在一个工具里,并以极佳的开发体验和启动速度让前后端工程师获益:

  • 更短的冷启动与更少的依赖
  • 开箱支持 TypeScript 与 JSX
  • 统一的 CLI、测试、打包与包管理
  • Node.js 兼容性 + 大量 Bun 原生 API 与扩展能力

如果你正在寻找“更快更简洁”的 JavaScript/TypeScript 工作流,或准备为团队减少工具链碎片化,Bun 值得你马上试一试

现在就开始:

  • 安装:curl -fsSL https://bun.com/install | bash
  • 运行:bun run index.tsxbun test
  • 文档:bun.com/docs

把复杂留给工具,把时间留给产品与创意。Bun,会让你的全栈开发更轻松。