https://github.com/cycleccc/next-nest-monorepo
next、nest、ts-rest、drizzle
https://github.com/cycleccc/next-nest-monorepo
authjs drizzle-orm nestjs next15 shadn-ui ts-rest
Last synced: 10 months ago
JSON representation
next、nest、ts-rest、drizzle
- Host: GitHub
- URL: https://github.com/cycleccc/next-nest-monorepo
- Owner: cycleccc
- Created: 2025-05-08T06:34:26.000Z (about 1 year ago)
- Default Branch: master
- Last Pushed: 2025-05-12T09:41:08.000Z (about 1 year ago)
- Last Synced: 2025-06-24T21:40:57.614Z (12 months ago)
- Topics: authjs, drizzle-orm, nestjs, next15, shadn-ui, ts-rest
- Language: TypeScript
- Homepage:
- Size: 1.22 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
(Next.js、NestJS、ts-rest、Drizzle、Biome)非常现代化,适合构建全栈应用。在 monorepo 架构下,合理组织这些技术有助于提高开发效率、模块复用性和部署一致性。
下面是一个推荐的架构设计方案,结合你提到的每项技术:
---
## 🏗️ 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 配置
```
---
## 🔧 各部分说明与整合方式
### `apps/web` (Next.js)
* 使用 **App Router** + React Server Component(可选)
* 集成 **ts-rest client** 来调用服务端 API(可在 SSR 和客户端使用)
* 使用 `@my-monorepo/contracts` 中定义的契约
* 使用 `@my-monorepo/ui` 的组件
### `apps/server` (NestJS)
* 核心 API 服务
* 使用 `ts-rest` 作为 API 契约和实现
* 数据访问用 `Drizzle ORM`(支持 PostgreSQL、SQLite、MySQL 等)
* 环境变量管理建议统一用 `dotenv` + 校验库(如 `zod`)
### `packages/contracts`
* 存放 ts-rest 的 API 契约定义
* 前后端共享类型定义和 API 接口规范
### `packages/db`
* 定义 Drizzle 的 schema 与 migrations
* 输出 `db` 实例供 NestJS 使用
### `packages/ui`
* Tailwind + Radix UI / shadcn/ui(可选)
* 提供跨项目可复用组件
### `packages/config`
* 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`
* **Biome**:
* 配置放在 `packages/config/biome.json`,在各个项目里使用 `extends`
* 也可以加 `format`, `lint` 脚本统一执行
---
## 🚀 Turbo 构建任务配置示意
```jsonc
// turbo.json
{
"pipeline": {
"build": {
"dependsOn": ["^build"],
"outputs": ["dist/**", ".next/**"]
},
"dev": {
"cache": false
},
"lint": {
"outputs": []
},
"format": {
"outputs": []
},
"test": {
"outputs": ["coverage/**"]
}
}
}
```
## 📝 开发命令说明
### 安装依赖
```bash
# 安装所有依赖
pnpm install
# 安装特定包的依赖
pnpm --filter install
```
### 开发命令
```bash
# 启动所有项目开发服务
pnpm dev
# 启动特定项目开发服务
pnpm --filter dev
# 启动 web 应用开发服务
pnpm --filter web dev
# 启动 server 开发服务
pnpm --filter server dev
```
### 构建命令
```bash
# 构建所有项目
pnpm build
# 构建特定项目
pnpm --filter build
# 构建 web 应用
pnpm --filter web build
# 构建 server
pnpm --filter server build
```
### 代码质量
```bash
# 运行所有项目的 lint
pnpm lint
# 运行所有项目的格式化
pnpm format
# 运行所有项目的测试
pnpm test
# 运行特定项目的测试
pnpm --filter test
```
### 包管理
```bash
# 添加依赖到特定包
pnpm --filter add
# 添加开发依赖到特定包
pnpm --filter add -D
# 移除特定包的依赖
pnpm --filter remove
```
### 常用工作流
```bash
# 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`
---