项目结构
Monorepo 架构概览
概述
EasyStarter 使用 Turborepo monorepo 结构配合 pnpm workspaces。
目录结构
easysaas/
├── apps/
│ ├── web/ # 前端(React + TanStack Start)
│ ├── server/ # 后端(Hono + Cloudflare Workers)
│ ├── native/ # 移动端(React Native + Expo)
├── packages/
│ ├── i18n/ # 共享国际化
│ ├── api-client/ # 类型安全 API 客户端
│ └── storage-config/ # 存储配置
└── docs/ # 文档应用
Web (apps/web/)
使用以下技术构建的前端应用:
- React 19 - UI 库
- TanStack Start - 全栈 React 框架
- TanStack Router - 类型安全路由
- TanStack Query - 数据获取
- TailwindCSS - 样式
- shadcn/ui - 组件库
apps/web/src/
├── components/ # 可复用 UI 组件
├── routes/ # 页面组件和路由
├── hooks/ # 自定义 React Hooks
├── lib/ # 工具函数
├── configs/ # 应用配置
└── styles/ # 全局样式Server (apps/server/)
使用以下技术构建的后端 API:
- Hono - Web 框架
- Cloudflare Workers - Serverless 运行时
- Drizzle ORM - 数据库工具包
- oRPC - 类型安全 RPC
apps/server/src/
├── routers/ # API 路由(oRPC)
├── handlers/ # 业务逻辑
├── db/ # 数据库 schema 和迁移
├── middlewares/ # 请求中间件
├── emails/ # 邮件模板
└── lib/ # 共享工具Native (apps/native/)
使用以下技术构建的移动应用:
- React Native - 跨平台移动开发
- Expo - 开发平台
- Expo Router - 基于文件的路由
包
i18n (packages/i18n/)
共享国际化包,包含所有支持语言的翻译。
api-client (packages/api-client/)
从服务器类型生成的类型安全 API 客户端。
storage-config (packages/storage-config/)
共享存储配置和工具。
关键文件
| 文件 | 用途 |
|---|---|
turbo.json | Turborepo 流水线配置 |
pnpm-workspace.yaml | 工作区包定义 |
.oxlintrc.json | 代码检查规则(oxlint) |
.oxfmtrc.json | 格式化规则(oxfmt) |
tsconfig.json | TypeScript 配置 |
开发工作流
# 安装依赖
pnpm install
# 启动所有应用
pnpm dev
# 启动特定应用
pnpm dev:web
pnpm dev:server
# 构建所有
pnpm build
# 类型检查
pnpm check-types