Bun (Bundle, Transpiler, Runtime) 是一个专为速度设计的 JavaScript/TypeScript 运行时。与 Node.js 不同,Bun 原生支持 TypeScript,这意味着你不需要配置 ts-node、babel 或复杂的构建步骤即可直接运行 .ts 文件。 以下是在 Bun 环境下进行 TypeScript 开发的最佳实践流程,以及推荐的学习资源。 🚀 第一部分:Bun + TypeScript 开发最佳实践流程
- 项目初始化 (Initialization) 不要手动创建文件,使用 Bun 的脚手架工具可以快速生成包含最佳配置的模板。
-
命令: mkdir my-bun-app && cd my-bun-app bun init
-
最佳实践:
- bun init 会自动创建一个 tsconfig.json,其中包含针对 Bun 优化的配置。
- 它会生成 bun.lockb(二进制锁文件),这比 yarn/npm 的文本锁文件快得多,但难以阅读。如果需要查看变动,可以使用 bun install 自动生成的文本快照,或配置 git diff 驱动。
- 配置 TypeScript (Configuration) 虽然 Bun 可以直接运行 TS,但为了获得最佳的代码提示和类型安全,需要微调 tsconfig.json。
-
安装类型定义: Bun 的 API 类型定义包含在 bun-types 中。 bun add -d @types/bun
-
tsconfig.json 关键配置: 确保你的配置包含以下内容,以正确识别 Bun 的全局变量: { “compilerOptions”: { “lib”: [“ESNext”], “module”: “esnext”, “target”: “esnext”, “moduleResolution”: “bundler”, “types”: [“bun-types”], // 关键点 “strict”: true, // 强烈建议开启严格模式 “noEmit”: true // Bun 直接运行源码,不需要 tsc 输出文件 } }
- 开发工作流 (Development Workflow) Bun 的杀手级特性是内置的“热重载”和极快的启动速度。
-
运行与监听: 不要使用 nodemon,使用 Bun 原生的 —watch 标志。 bun —watch index.ts
-
环境变量: Bun 内置了对 .env 文件的支持。你不需要安装 dotenv 库。 // 直接使用 console.log(process.env.API_KEY);
- 依赖管理 (Dependency Management) 使用 bun install 替代 npm install。
- 最佳实践:
- Bun 兼容 npm 包。
- 利用 Bun 的极速安装特性,在 CI/CD 流程中可以显著减少构建时间。
- 使用 bun add
安装运行时依赖,bun add -d 安装开发依赖。
- 测试 (Testing) 不要安装 Jest 或 Mocha。Bun 内置了一个兼容 Jest 的测试运行器,速度极快。
- 编写测试 (math.test.ts): import { describe, expect, test } from “bun:test”; import { add } from ”./math”;
describe(“math”, () => { test(“adds 1 + 2 to equal 3”, () => { expect(add(1, 2)).toBe(3); }); });
- 运行测试: bun test bun test —watch # TDD 模式
- 类型检查 (Type Checking - 关键点) 这是新手最容易误解的地方:Bun 在运行时会剥离类型(Transpile),但不会检查类型错误。 即使你的代码有严重的类型错误,只要语法正确,Bun 照样会运行它。
-
最佳实践: 你必须保留 tsc (TypeScript Compiler) 用于静态类型检查。 在 package.json 中添加脚本: “scripts”: { “start”: “bun run index.ts”, “check”: “tsc —noEmit”, // 仅检查类型,不输出文件 “lint”: “bun check && eslint .” }
在 CI/CD 管道或 git commit hook 中务必运行 bun run check。
- 构建与部署 (Build & Deploy) 虽然 Bun 可以直接运行 .ts,但在生产环境中,你可能希望将其打包成单个可执行文件或压缩后的 JS。
-
打包: bun build ./index.ts —outdir ./out —target bun
-
单文件可执行程序 (Single Executable): Bun 可以将你的代码和运行时打包成一个二进制文件: bun build ./index.ts —compile —outfile myapp
🛠️ 推荐技术栈 (The “Bun Stack”) 如果完全投入 Bun 生态,推荐使用以下工具获得最佳性能:
| 领域 | 推荐工具 | 说明 |
|---|---|---|
| Web 框架 | ElysiaJS | 专为 Bun 设计,性能极高,类型推导极其强大(End-to-End Type Safety)。 |
| 数据库 ORM | Drizzle ORM | 轻量级,对 TypeScript 支持极好,且无运行时开销。 |
| 数据库 | Bun:sqlite | Bun 内置的高性能 SQLite 驱动。 |
| 包管理 | Bun | 自带包管理器。 |
| 📚 学习教程与资源 |
- 官方文档 (最权威)
- Bun 官方文档:文档非常简洁,重点阅读 “Runtime”, “Test Runner”, 和 “TypeScript” 章节。
- ElysiaJS 文档:如果你做 Web 开发,这是必读的。它的 “Treaty” 概念展示了 TS 在前后端类型共享的极致。
- 优质入门教程 (中文/英文)
- Bilibili / YouTube: 搜索 “Bun crash course”。推荐 Up 主如 “CodeWithAntonio” (英文) 或国内技术 Up 主关于 “Bun + Elysia” 的实战视频。
- GitHub: Bun Examples - 官方仓库里的 examples 目录,包含了 HTTP 服务器、WebSocket、SQLite 等大量简单的 TS 示例代码。
- 进阶学习:Total TypeScript 虽然不是专讲 Bun,但在 Bun 环境下,你需要更扎实的 TS 功底来处理高级类型。Matt Pocock 的教程是目前的行业标杆。 💡 总结:Bun 开发的核心差异
记住: 在 Node.js 中,你通常需要配置 ts-node + nodemon + jest + eslint + prettier。 在 Bun 中,你只需要: Bun (它内置了运行、监听、测试) + tsc (仅用于类型检查)。
我可以为你做的下一步: 你想尝试用 ElysiaJS (Bun 的原生框架) 写一个简单的 “Hello World” API 示例,还是想了解如何将现有的 Node.js 项目迁移到 Bun?