(Next.js、NestJS、tRPC、Drizzle、Biome)非常现代化,适合构建全栈应用。在 monorepo 架构下,合理组织这些技术有助于提高开发效率、模块复用性和部署一致性。
- 包管理器:
pnpm(强烈推荐,支持 workspace) - 构建/任务管理:
Turbo(用于缓存和并行化构建/测试/部署任务) - 代码规范/格式化:
Biome(替代 ESLint + Prettier + lint-staged) - 类型检查:TypeScript 全项目统一
- 环境变量管理:使用
dotenv和env-schema
my-monorepo/
├── apps/ # 应用目录
│ ├── web/ # 前端应用 (Next.js + ts-rest)
│ └── server/ # 后端服务 (NestJS + ts-rest + Drizzle)
├── packages/ # 共享包目录
│ ├── contracts/ # ts-rest 契约定义
│ └── db/ # Drizzle schema + db client
├── .vscode/ # VS Code 配置
├── .turbo/ # Turborepo 缓存
├── node_modules/ # 依赖目录
├── .gitignore # Git 忽略配置
├── biome.json # Biome 配置
├── package.json # 项目配置
├── pnpm-lock.yaml # pnpm 锁文件
├── pnpm-workspace.yaml # pnpm 工作空间配置
├── tsconfig.json # TypeScript 配置
└── turbo.json # Turborepo 配置
- 使用 App Router + React Server Component(可选)
- 集成 ts-rest client 来调用服务端 API(可在 SSR 和客户端使用)
- 使用
@my-monorepo/contracts中定义的契约 - 使用
@my-monorepo/ui的组件
- 核心 API 服务
- 使用
ts-rest作为 API 契约和实现 - 数据访问用
Drizzle ORM(支持 PostgreSQL、SQLite、MySQL 等) - 环境变量管理建议统一用
dotenv+ 校验库(如zod)
- 存放 ts-rest 的 API 契约定义
- 前后端共享类型定义和 API 接口规范
- 定义 Drizzle 的 schema 与 migrations
- 输出
db实例供 NestJS 使用
- Tailwind + Radix UI / shadcn/ui(可选)
- 提供跨项目可复用组件
- tsconfig、biome config、turbo config、lint-staged、prettier(如果还用)、jest、vitest 等共享配置
-
ts-rest:
- 在
packages/api中定义 API 契约 - 在 NestJS 中使用
@ts-rest/nest实现 API - 在 Next.js 中使用
@ts-rest/core和@ts-rest/react-query进行客户端调用 - 确保前后端类型一致性
- 在
-
Drizzle:
- schema 和
migrate脚本集中在packages/db,NestJS 中引入即可 drizzle-kit配置文件推荐放在packages/db/drizzle.config.ts
- schema 和
-
Biome:
- 配置放在
packages/config/biome.json,在各个项目里使用extends - 也可以加
format,lint脚本统一执行
- 配置放在
# 安装所有依赖
pnpm install
# 安装特定包的依赖
pnpm --filter <package-name> install# 启动所有项目开发服务
pnpm dev
# 启动特定项目开发服务
pnpm --filter <package-name> dev
# 启动 web 应用开发服务
pnpm --filter web dev
# 启动 server 开发服务
pnpm --filter server dev# 构建所有项目
pnpm build
# 构建特定项目
pnpm --filter <package-name> build
# 构建 web 应用
pnpm --filter web build
# 构建 server
pnpm --filter server build# 运行所有项目的 lint
pnpm lint
# 运行所有项目的格式化
pnpm format
# 运行所有项目的测试
pnpm test
# 运行特定项目的测试
pnpm --filter <package-name> test# 添加依赖到特定包
pnpm --filter <package-name> add <package>
# 添加开发依赖到特定包
pnpm --filter <package-name> add -D <package>
# 移除特定包的依赖
pnpm --filter <package-name> remove <package># 1. 安装依赖
pnpm install
# 2. 启动开发服务(web + server)
pnpm dev
# 3. 构建生产版本
pnpm build
# 4. 运行测试
pnpm test- 每个
apps下放.env.local - 用
env-schema+zod(或@nestjs/config自带的 validation)进行校验 - 可以定义统一的环境变量类型定义在
packages/config/env.ts