这是一个非常硬核且前卫的选择。Bun + Turso + Drizzle 被称为目前的“全栈边缘开发三剑客”,其核心优势在于极低的冷启动延迟和极致的类型安全。 为什么这个组合很流行?

  • Bun: 极速的运行时,内置对 SQLite 的原生支持。
  • Turso: 基于 libSQL(SQLite 的分叉),专门为边缘计算设计,支持 HTTP 远程连接,全球复制延迟极低。
  • Drizzle ORM: “极简主义”的 ORM。它不像 Prisma 那样需要繁重的生成步骤,它只是普通的 TypeScript 代码,类型推导极其强大。 🛠️ 集成开发步骤
  1. 环境准备与安装 首先,确保你已经安装了 Turso CLI 并登录。

创建项目

mkdir bun-turso-demo && cd bun-turso-demo bun init -y

安装 Drizzle 和 Turso 客户端驱动

bun add drizzle-orm @libsql/client

安装开发依赖

bun add -d drizzle-kit

  1. 配置 Turso 数据库 通过 CLI 创建一个数据库并获取连接信息: turso db create my-db turso db show my-db —url # 获取 URL (例如 libsql://my-db-user.turso.io) turso db tokens create my-db # 获取 Token

在项目根目录创建 .env 文件: TURSO_CONNECTION_URL=libsql://your-db-url.turso.io TURSO_AUTH_TOKEN=your-auth-token

  1. 定义数据库 Schema (src/db/schema.ts) 使用 Drizzle,你的数据库结构就是 TypeScript 代码。 import { sqliteTable, text, integer } from “drizzle-orm/sqlite-core”;

export const users = sqliteTable(“users”, { id: integer(“id”).primaryKey({ autoIncrement: true }), name: text(“name”).notNull(), email: text(“email”).notNull().unique(), });

  1. 初始化 Drizzle 客户端 (src/db/index.ts) import { drizzle } from “drizzle-orm/libsql”; import { createClient } from “@libsql/client”; import * as schema from ”./schema”;

const client = createClient({ url: process.env.TURSO_CONNECTION_URL!, authToken: process.env.TURSO_AUTH_TOKEN!, });

export const db = drizzle(client, { schema });

  1. 配置 Drizzle Kit (用于迁移管理) 在根目录创建 drizzle.config.ts。这个工具负责根据你的 Schema 生成 SQL 迁移文件,并同步到 Turso。 import type { Config } from “drizzle-kit”;

export default { schema: ”./src/db/schema.ts”, out: ”./drizzle”, driver: “turso”, // 关键配置 dbCredentials: { url: process.env.TURSO_CONNECTION_URL!, authToken: process.env.TURSO_AUTH_TOKEN!, }, } satisfies Config;

🚀 最佳实践工作流 A. 推送数据库结构 (Push) 在开发阶段,如果你改动了 schema.ts,最快的方法是直接推送: bunx drizzle-kit push:sqlite

这会立即更新 Turso 远程数据库的表结构,不需要繁琐的迁移文件。 B. 数据库管理界面 (Studio) Drizzle 自带了一个非常棒的本地可视化工具: bunx drizzle-kit studio

它会在浏览器打开一个界面,让你像操作 Excel 一样管理远程 Turso 数据库中的数据。 C. 在代码中使用 (增删改查) // src/test.ts import { db } from ”./db”; import { users } from ”./db/schema”;

// 插入数据 await db.insert(users).values({ name: “Bun User”, email: “hello@bun.sh”, });

// 查询数据(带完全的类型推导) const allUsers = await db.query.users.findMany({ where: (users, { eq }) => eq(users.name, “Bun User”), });

console.log(allUsers);

💡 进阶开发建议

  • 使用分布式副本:Turso 的魅力在于你可以把数据推送到离用户最近的地方。如果你的 Bun 应用部署在 Vercel 或 Fly.io 的边缘节点,Turso 的读取速度几乎等同于本地读取。
  • 严格模式:在 tsconfig.json 中务必开启 strict: true。Drizzle 的类型推导依赖于 TS 的高级特性,非严格模式下会失效。
  • Zod 结合:推荐使用 drizzle-zod 库。它可以根据你的数据库表结构直接生成 Zod 校验 Schema,从而在 Elysia 框架中直接进行 API 参数校验,实现从 数据库 -> 后端逻辑 -> API 接口 -> 前端 的“全链路类型闭环”。 相关学习资源
  • Drizzle ORM Docs: 文档写得非常幽默且清晰。
  • Turso 官方博客: 经常发布关于如何结合 Bun 和边缘计算的架构文章。 你是否需要我演示一下如何将 Elysia + Drizzle + Turso 串联起来,写一个完整的 CRUD 接口示例?