Bun (Bundle, Transpiler, Runtime) 是一个专为速度设计的 JavaScript/TypeScript 运行时。与 Node.js 不同,Bun 原生支持 TypeScript,这意味着你不需要配置 ts-node、babel 或复杂的构建步骤即可直接运行 .ts 文件。 以下是在 Bun 环境下进行 TypeScript 开发的最佳实践流程,以及推荐的学习资源。 🚀 第一部分:Bun + TypeScript 开发最佳实践流程

  1. 项目初始化 (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 驱动。
  1. 配置 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 输出文件 } }

  1. 开发工作流 (Development Workflow) Bun 的杀手级特性是内置的“热重载”和极快的启动速度。
  • 运行与监听: 不要使用 nodemon,使用 Bun 原生的 —watch 标志。 bun —watch index.ts

  • 环境变量: Bun 内置了对 .env 文件的支持。你不需要安装 dotenv 库。 // 直接使用 console.log(process.env.API_KEY);

  1. 依赖管理 (Dependency Management) 使用 bun install 替代 npm install。
  • 最佳实践:
    • Bun 兼容 npm 包。
    • 利用 Bun 的极速安装特性,在 CI/CD 流程中可以显著减少构建时间。
    • 使用 bun add 安装运行时依赖,bun add -d 安装开发依赖。
  1. 测试 (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 模式
  1. 类型检查 (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。

  1. 构建与部署 (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)。
数据库 ORMDrizzle ORM轻量级,对 TypeScript 支持极好,且无运行时开销。
数据库Bun:sqliteBun 内置的高性能 SQLite 驱动。
包管理Bun自带包管理器。
📚 学习教程与资源
  1. 官方文档 (最权威)
  • Bun 官方文档:文档非常简洁,重点阅读 “Runtime”, “Test Runner”, 和 “TypeScript” 章节。
  • ElysiaJS 文档:如果你做 Web 开发,这是必读的。它的 “Treaty” 概念展示了 TS 在前后端类型共享的极致。
  1. 优质入门教程 (中文/英文)
  • Bilibili / YouTube: 搜索 “Bun crash course”。推荐 Up 主如 “CodeWithAntonio” (英文) 或国内技术 Up 主关于 “Bun + Elysia” 的实战视频。
  • GitHub: Bun Examples - 官方仓库里的 examples 目录,包含了 HTTP 服务器、WebSocket、SQLite 等大量简单的 TS 示例代码。
  1. 进阶学习: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?