Bun 简介 #

什么是 Bun? #

Bun 是一个现代化的高性能 JavaScript 和 TypeScript 运行时,由 Jarred Sumner 于 2021 年创建。Bun 使用 Zig 语言编写,基于 Apple 的 JavaScriptCore 引擎,旨在成为 Node.js 的更快替代品。

核心定位 #

text
┌─────────────────────────────────────────────────────────────┐
│                         Bun                                  │
├─────────────────────────────────────────────────────────────┤
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐         │
│  │   运行时     │  │   打包器     │  │  测试运行器  │         │
│  └─────────────┘  └─────────────┘  └─────────────┘         │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐         │
│  │  包管理器    │  │  TypeScript │  │   SQLite    │         │
│  └─────────────┘  └─────────────┘  └─────────────┘         │
└─────────────────────────────────────────────────────────────┘

Bun 的历史 #

发展历程 #

text
2021年 ─── Bun 项目启动
    │
    │      Jarred Sumner 开发
    │      使用 Zig 语言编写
    │      基于 JavaScriptCore
    │
2022年 ─── Bun 0.1 发布
    │
    │      公开发布
    │      社区开始关注
    │      性能惊艳众人
    │
2023年 ─── Bun 1.0 发布
    │
    │      生产就绪版本
    │      完整的 Node.js 兼容
    │      包管理器功能
    │
2024年 ─── Bun 1.1+
    │
    │      Windows 支持
    │      更多 API 完善
    │      生态持续扩展
    │
至今   ─── 快速发展
    │
    │      GitHub 70k+ Stars
    │      活跃的社区
    │      持续性能优化

里程碑版本 #

版本 时间 重要特性
0.1 2022.07 首次发布,基础运行时功能
0.5 2023.03 包管理器功能
0.6 2023.04 测试运行器
0.7 2023.07 Windows 预览版
1.0 2023.09 生产就绪版本
1.1 2024.04 Windows 正式支持
1.2 2024.12 更多 API 和性能优化

为什么选择 Bun? #

Node.js 的痛点 #

传统 Node.js 开发面临的问题:

javascript
// 需要多个工具配合
// package.json
{
  "devDependencies": {
    "typescript": "^5.0.0",      // TypeScript 编译
    "ts-node": "^10.0.0",        // TS 运行
    "nodemon": "^3.0.0",         // 热重载
    "jest": "^29.0.0",           // 测试
    "esbuild": "^0.19.0",        // 打包
    "eslint": "^8.0.0",          // 代码检查
    "prettier": "^3.0.0"         // 格式化
  }
}

// 启动慢、配置复杂
// 运行 TypeScript 需要 ts-node 或编译

Bun 的解决方案 #

javascript
// 一个工具搞定所有
// 无需安装额外依赖

// 直接运行 TypeScript
bun run index.ts

// 内置测试
bun test

// 内置打包
bun build ./src/index.ts --outdir ./dist

// 包管理(比 npm 快 25 倍)
bun install

Bun 的核心特点 #

1. 极致性能 #

Bun 的性能远超 Node.js 和 Deno:

text
┌─────────────────────────────────────────────────────────────┐
│                    性能对比(相对速度)                       │
├─────────────────────────────────────────────────────────────┤
│                                                              │
│  Node.js   ████████████████████████████████████  1x         │
│                                                              │
│  Deno      ██████████████████████████           1.5x        │
│                                                              │
│  Bun       █                                  4x+           │
│                                                              │
└─────────────────────────────────────────────────────────────┘

启动速度对比 #

bash
# Node.js 启动时间
time node -e "console.log('hello')"
# real    0m0.080s

# Bun 启动时间
time bun -e "console.log('hello')"
# real    0m0.015s

测试运行对比 #

bash
# Jest 运行 100 个测试
time jest
# real    0m5.234s

# Bun 运行相同测试
time bun test
# real    0m0.876s

2. TypeScript 原生支持 #

无需配置,直接运行 TypeScript:

typescript
// index.ts - 直接运行,无需编译
interface User {
  name: string;
  age: number;
}

function greet(user: User): string {
  return `Hello, ${user.name}!`;
}

const user: User = { name: "Bun", age: 3 };
console.log(greet(user));

// 运行: bun run index.ts

3. JSX 支持 #

内置 JSX 转换,支持 React:

tsx
// app.tsx
function App({ name }: { name: string }) {
  return <h1>Hello, {name}!</h1>;
}

console.log(<App name="Bun" />);

// 运行: bun run app.tsx

4. Web 标准 API #

内置现代 Web API:

javascript
// fetch API - 无需 node-fetch
const response = await fetch("https://api.example.com/data");
const data = await response.json();

// WebSocket - 无需 ws 库
const ws = new WebSocket("wss://example.com");
ws.onmessage = (event) => console.log(event.data);

// FormData - 无需 form-data
const formData = new FormData();
formData.append("file", new Blob(["content"]), "file.txt");

// URL、URLSearchParams
const url = new URL("https://example.com?foo=bar");
console.log(url.searchParams.get("foo"));

5. 内置 SQLite #

高性能 SQLite 数据库:

javascript
import { Database } from "bun:sqlite";

const db = new Database(":memory:");

db.run(`
  CREATE TABLE users (
    id INTEGER PRIMARY KEY,
    name TEXT
  )
`);

db.run("INSERT INTO users (name) VALUES (?)", ["Bun"]);

const users = db.query("SELECT * FROM users").all();
console.log(users);

6. 热重载 #

开发模式自动重载:

bash
# 使用 --hot 参数
bun --hot run server.ts

# 文件修改后自动重载
# 无需 nodemon

Bun 与其他运行时对比 #

Bun vs Node.js #

特性 Bun Node.js
启动速度 极快 较慢
TypeScript ✅ 原生支持 ❌ 需要工具
JSX ✅ 原生支持 ❌ 需要 Babel
测试运行器 ✅ 内置 ❌ 需要 Jest
打包器 ✅ 内置 ❌ 需要 Webpack
包管理器 ✅ 内置 ❌ 需要 npm/yarn
fetch API ✅ 内置 ✅ v18+
SQLite ✅ 内置 ❌ 需要库
生态成熟度 🔄 发展中 ✅ 成熟

Bun vs Deno #

特性 Bun Deno
语言 Zig Rust
引擎 JavaScriptCore V8
npm 兼容 ✅ 原生 ✅ 兼容层
性能 极快
配置文件 package.json deno.json
安全模型 无限制 权限系统
内置工具 全面 全面

Bun 的架构 #

技术栈 #

text
┌─────────────────────────────────────────────────────────────┐
│                      Bun 架构                                │
├─────────────────────────────────────────────────────────────┤
│                                                              │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                    用户代码                            │  │
│  │         JavaScript / TypeScript / JSX                 │  │
│  └──────────────────────────────────────────────────────┘  │
│                           │                                  │
│                           ▼                                  │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                    Bun Runtime                        │  │
│  │  ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐    │  │
│  │  │Transpiler│ │ Bundler │ │ Tester  │ │ Pkg Mgr │    │  │
│  │  └─────────┘ └─────────┘ └─────────┘ └─────────┘    │  │
│  └──────────────────────────────────────────────────────┘  │
│                           │                                  │
│                           ▼                                  │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                 JavaScriptCore (JSC)                  │  │
│  │              Apple 的 JavaScript 引擎                  │  │
│  └──────────────────────────────────────────────────────┘  │
│                           │                                  │
│                           ▼                                  │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                      Zig 层                           │  │
│  │           系统调用、IO、网络操作                        │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                              │
└─────────────────────────────────────────────────────────────┘

为什么选择 Zig 和 JavaScriptCore? #

技术 选择原因
Zig 无隐藏控制流、手动内存管理、编译时执行、易于与 C 交互
JavaScriptCore Safari 的 JS 引擎、启动快、内存效率高、经过生产验证

Bun 的应用场景 #

1. Web API 服务 #

typescript
// server.ts
Bun.serve({
  port: 3000,
  async fetch(req) {
    const url = new URL(req.url);
    
    if (url.pathname === "/api/users") {
      return Response.json({ users: [] });
    }
    
    return new Response("Not Found", { status: 404 });
  },
});

console.log("Server running on http://localhost:3000");

2. 全栈应用 #

tsx
// 使用 Elysia 或 Hono 框架
import { Elysia } from "elysia";

new Elysia()
  .get("/", () => "Hello Bun!")
  .get("/users/:id", ({ params }) => `User ${params.id}`)
  .listen(3000);

3. CLI 工具 #

typescript
// cli.ts
const args = process.argv.slice(2);

if (args[0] === "init") {
  console.log("Initializing project...");
  // 创建项目结构
}

// 运行: bun run cli.ts init

4. 脚本任务 #

typescript
// scripts/build.ts
import { $ } from "bun";

await $`echo "Building..."`;
await $`bun build ./src/index.ts --outdir ./dist`;
console.log("Build complete!");

Bun 的核心概念 #

全局对象 #

javascript
// Bun 特有全局
Bun.serve();           // HTTP 服务器
Bun.file();            // 文件操作
Bun.write();           // 写入文件
Bun.env;               // 环境变量
Bun.$;                 // Shell 命令

// Node.js 兼容
process;               // 进程对象
Buffer;                // Buffer 类

内置模块 #

javascript
// Bun 特有模块
import { Database } from "bun:sqlite";
import { spawn } from "bun";
import { serve } from "bun";

// Node.js 兼容模块
import fs from "fs";
import path from "path";
import http from "http";

Bun 的局限性 #

已知限制 #

  1. 生态成熟度:部分 npm 包可能不兼容
  2. 原生模块:某些 Node.js 原生模块需要适配
  3. Windows 支持:部分功能仍在完善
  4. 社区规模:相比 Node.js 社区较小

解决方案 #

javascript
// 使用 --bun 强制使用 Bun 运行
bun --bun run script.js

// 使用 node fallback
// Bun 会自动尝试 Node.js 兼容模式

学习路径 #

text
入门阶段
├── 安装与配置
├── 运行第一个脚本
├── TypeScript 基础
└── 包管理基础

进阶阶段
├── HTTP 服务开发
├── 文件操作
├── SQLite 数据库
└── 网络请求

高级阶段
├── 打包配置
├── 测试编写
├── Worker 多线程
└── 性能优化

实战阶段
├── Web API 服务
├── 全栈应用
├── CLI 工具
└── 微服务架构

下一步 #

现在你已经了解了 Bun 的基本概念,接下来学习 安装与配置 开始实际使用 Bun!

最后更新:2026-03-29