安装

运行 TanStack 模板及其本地 D1 数据库。

本指南会将一份全新的模板运行成位于 http://localhost:3000 的本地 Worker。

前置条件

  • Node.js 22 LTS —— 推荐用于模板的 Vite 7 工具链。
  • pnpm —— 仓库使用的包管理器。
  • Cloudflare 账户 —— 远程 D1/R2 与部署时需要,首次本地启动不需要。
  • Wrangler —— 已是开发依赖,通过 pnpm wrangler 调用,无需全局安装。

不需要本地 PostgreSQL。Cloudflare D1 会通过 Worker 开发环境 (Miniflare)在本地运行。

设置

安装依赖

在模板目录执行:

pnpm install

创建本地环境文件

cp .env.example .env

至少设置:

BETTER_AUTH_SECRET=replace-with-a-random-secret
BETTER_AUTH_URL=http://localhost:3000

可用 openssl rand -base64 32 生成密钥。运行 pnpm dev 时,Cloudflare Vite 插件会让 Vite(通过 import.meta.env 读取 VITE_*)与本地 Worker 运行时都能读取 .env。只有直接运行 wrangler dev 时,.dev.vars 才可作为可选后备。

启用 OAuth、邮件、支付、AI 或远程 D1 工具前,请查看 环境变量

初始化本地 D1

仓库的 drizzle/ 已包含迁移。将它应用到本地 Miniflare 数据库:

pnpm db:migrate:local

如果你修改了 schema,或拿到的副本中 drizzle/ 为空,请先生成并审查迁移:

pnpm db:generate
pnpm db:migrate:local

这不会修改远程 D1。不要使用 drizzle-kit push;模板使用需审查的 SQL 迁移。

验证安装

  • 首页在 http://localhost:3000 正常渲染。
  • 注册会向本地 D1 写入用户,且没有缺少数据表错误。
  • 应用能进入注册成功页面。
  • 配置 Resend 后,验证邮件能送达且链接有效。
  • 验证并登录后,可以访问 /dashboard

默认强制邮箱验证。未设置 RESEND_API_KEY 时,邮件辅助函数会返回发送失败; 注册可能完成,但邮件不会送达,账户也无法完成正常登录流程。请配置 邮件,或仅在本地开发中有意关闭验证要求。

包脚本

命令用途
pnpm dev在 3000 端口启动 Vite 与本地 Worker 运行时
pnpm build构建生产 Worker 与客户端资源
pnpm preview预览 Vite 生产构建
pnpm deploy构建后通过 Wrangler 部署
pnpm test单次运行 Vitest 测试
pnpm check运行 Biome lint 与格式检查
pnpm lint运行 Biome lint 诊断
pnpm format运行 Biome 格式化

数据库与 Wrangler 脚本

命令用途
pnpm db:generate根据 Drizzle schema 在 drizzle/ 生成 SQL
pnpm db:migrate:local向本地 Miniflare D1 应用迁移
pnpm db:migrate向远程 soar-tanstack D1 应用迁移
pnpm cf-typegen重新生成 Cloudflare 绑定类型
pnpm wrangler <command>运行仓库内的 Wrangler CLI

常见首次运行问题

症状常见原因修复方法
注册时出现 no such table本地 D1 为空运行 pnpm db:migrate:local
会话或签名错误BETTER_AUTH_SECRET 缺失、仍是占位值或频繁改变.env 中生成并固定随机值
Cookie、跳转或回调使用错误主机BETTER_AUTH_URL 与浏览器 origin 不一致本地使用 http://localhost:3000
验证/重置邮件未到达未配置 Resend设置 RESEND_API_KEY 与有效发件人,或仅在本地放宽验证
GitHub/Google 登录失败缺少凭据或回调 URL配置服务商,或隐藏对应按钮

相关页面

On this page