技术栈
了解原生 Worker 的运行链路、资源绑定和与 Next.js 模板的区别。
Flare 的目标是把应用、数据库、私有文件、任务与 AI 放在 Cloudflare 原生运行时。它不是把 Next.js 包装为 Worker,也不需要 OpenNext。
运行链路
浏览器 React / React Query
→ TanStack Start server function 或 /api/* server route
→ 应用模块服务
→ @musemvp/* 领域包
→ D1 / R2 / Email / AI / Queues 原生绑定| 层 | 当前实现 | 主要入口 |
|---|---|---|
| 页面与 SSR | React、TanStack Start / Router | apps/web/src/routes |
| 构建 | Vite、Cloudflare Vite plugin、Tailwind、MDX | apps/web/vite.config.ts |
| UI | shadcn/Base UI、Lucide、Tailwind 变量 | apps/web/src/components/ui |
| 数据 | Drizzle SQLite schema、D1 查询与 batch | packages/db |
| 认证 | Better Auth、SQLite adapter、认证插件 | packages/auth |
| 支付 | 四网关统一契约、D1 inbox/outbox | packages/billing、modules/billing |
| 多语言 | Paraglide 与中英文覆盖消息 | packages/i18n |
| 工具 | TypeScript CLI、Vitest、Playwright | 根 package.json、packages/cli |
Worker 中的资源
| 绑定 | 用途 | 本地与远程的区别 |
|---|---|---|
DB | D1 账户、文件元数据、账本、任务与审计 | Wrangler 提供本地 SQLite 状态 |
R2_BUCKET | 私有文件内容 | 本地对象不自动同步到生产 |
EMAIL | Cloudflare Email Sending | development 改为数据库捕获 |
AI | Workers AI 模型调用 | 没有本地模型模拟器 |
JOBS | Webhook 与摘要队列 | 生产有独立消费队列与死信队列 |
src/server.ts 是 Worker 入口,除 fetch 外还处理 Queue 和定时恢复。Wrangler 配置中的 cron 当前每五分钟运行一次恢复任务;不是每个浏览器请求都扫描待处理记录。
与 Next.js 工程的区别
- UI 是普通 React/TanStack 组件,不采用 Next.js Server Components 的
use client分层。 beforeLoad做登录和角色守卫,loader读取数据;服务端 API 仍独立鉴权,不能只靠页面隐藏。- 数据库是 D1/SQLite,不读取 PostgreSQL
DATABASE_URL;存储通过绑定而非 S3 访问密钥。 - 路由、SSR、资源名字与发布配置归 Flare 自己管理。原 MuseMVP 的
pnpm dev:cf、cf:deploy等不是本仓库命令。
调整技术栈前的检查
先确认需要改变的是产品选择还是基础设施。套餐与额度改 packages/config;主题改应用 CSS/组件;资源名改 target-resources.ts。加入数据库驱动或新的部署 adapter 会改变架构边界,不能通过改一个环境变量完成。
版本以当前 pnpm-lock.yaml 为准。升级依赖后应重新验证类型、Workers 兼容性和编译后 E2E,而不是只看浏览器开发模式。