c6027590a7aa3dd69cceaa6ff82ddbdbc6b8acfc
保持原结构与技术准确性,仅做语言切换。技术术语(RPC、OpenAPI、migrate、Drizzle Studio 等)保留英文。
fullstack-starter
强约定的单二进制全栈 starter。Bun + TanStack Start(React 19 SSR)+ ORPC(契约优先)+ Drizzle + PostgreSQL,编译为单个可执行文件部署。
Agent 笔记与非显而易见的不变量见 AGENTS.md。改结构前先读。
快速开始
cp .env.example .env
bun install
bun run db:push # 开发期:同步 schema 不生成 migration 文件
bun run dev # http://localhost:3000
RPC 入口:/api/rpc · OpenAPI 文档:/api/docs · Spec:/api/spec.json · 存活探针:/health。
脚本
| 命令 | 作用 |
|---|---|
bun run dev |
Vite 开发服务器,3000 端口(strict) |
bun run build |
构建到 .output/ |
bun run compile |
bun build --compile 生成单二进制 out/server-<target> |
bun run cli <cmd> |
源码态运行 CLI 子命令(serve、migrate) |
bun run typecheck |
tsc --noEmit |
bun run test |
bun test(同目录 *.test.ts) |
bun run fix |
Biome lint + format + 整理 imports |
bun run db:push |
仅开发期 schema 同步(不写 migration 文件) |
bun run db:generate |
把 SQL migration 写到 ./drizzle/ 并重生 migrations.gen.ts |
bun run db:embed |
仅从 ./drizzle/ 重生 src/server/db/migrations.gen.ts(手改 SQL 后用) |
bun run db:migrate |
通过 drizzle-kit 本地应用 migration(开发便利) |
bun run db:studio |
Drizzle Studio |
跨平台编译:bun run compile:{linux,darwin,windows}[:arch]。
新增一个功能(以 post 为例)
契约优先、纯增量。按以下顺序建/改文件:
src/server/db/schema/post.ts— 定义postTable,展开...generatedFields。src/server/db/schema/index.ts—export * from './post'。src/server/api/contracts/post.contract.ts— 通过drizzle-zod从表派生 Zod schema。src/server/api/contracts/index.ts— 把post加进contract对象。src/server/api/routers/post.router.ts— 实现os.post.*.handler(...)。src/server/api/routers/index.ts— 把post加进router对象。src/client/queries/post.ts— 导出useInvalidatePosts(或更细粒度 helper),用于失效受影响的 list key。src/routes/<page>.tsx— 用useSuspenseQuery+ loaderensureQueryData;mutation 的onSuccess调用上一步的 helper。bun run db:generate— 写 SQL migration 到./drizzle/并嵌入src/server/db/migrations.gen.ts。
部署
永远 先 migrate 再 serve。Migration 已嵌入二进制,二进制是你唯一发布的产物。
./server migrate # 用 $DATABASE_URL 应用嵌入式 migration
./server # 启动 HTTP 服务器(默认子命令)
compose.yaml 把这个模式编排了出来:一次性 migrate 服务,app 通过 service_completed_successfully 等它完成。Kubernetes 上:把 ./server migrate 放进 initContainer 或 Helm pre-upgrade Job。
docker compose up --build
Description
Languages
TypeScript
98.7%
Dockerfile
1%
JavaScript
0.2%