Files
seclusion/README.md
charilezhou 74ced8c0c6 chore: 初始化 monorepo 项目脚手架
- 配置 pnpm workspace + Turborepo
- 创建 Next.js 15 前端应用 (apps/web)
- 创建 NestJS 10 后端应用 (apps/api)
- 集成 Prisma ORM + Swagger + JWT 认证
- 添加共享包 (packages/shared, eslint-config, typescript-config)
- 添加项目文档 (README, CLAUDE.md, docs/design.md)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-28 14:51:40 +08:00

117 lines
2.3 KiB
Markdown

# Seclusion
基于 Next.js + NestJS 的 Monorepo 项目模板,使用 pnpm workspace + Turborepo 管理。
## 技术栈
- **前端**: Next.js 15 + React 19 + TypeScript
- **后端**: NestJS 10 + Prisma + Swagger + JWT
- **工具链**: pnpm + Turborepo + ESLint + Prettier
## 项目结构
```
seclusion/
├── apps/
│ ├── web/ # Next.js 前端应用
│ └── api/ # NestJS 后端应用
├── packages/
│ ├── shared/ # 共享代码(类型、工具函数)
│ ├── eslint-config/ # ESLint 配置
│ └── typescript-config/ # TypeScript 配置
├── package.json
├── pnpm-workspace.yaml
└── turbo.json
```
## 快速开始
### 环境要求
- Node.js >= 20.0.0
- pnpm >= 9.0.0
### 安装依赖
```bash
pnpm install
```
### 配置环境变量
```bash
# 后端
cp apps/api/.env.example apps/api/.env
# 前端
cp apps/web/.env.example apps/web/.env.local
```
### 初始化数据库
```bash
# 生成 Prisma Client
pnpm db:generate
# 推送数据库 schema
pnpm db:push
```
### 启动开发服务器
```bash
# 同时启动前端和后端
pnpm dev
```
- 前端: http://localhost:3000
- 后端: http://localhost:4000
- API 文档: http://localhost:4000/api/docs
## 常用命令
```bash
# 开发
pnpm dev # 启动所有应用的开发服务器
# 构建
pnpm build # 构建所有应用
# 代码质量
pnpm lint # 运行 ESLint
pnpm format # 格式化代码
# 数据库
pnpm db:generate # 生成 Prisma Client
pnpm db:push # 推送 schema 到数据库
pnpm db:migrate # 运行数据库迁移
# 清理
pnpm clean # 清理所有构建产物和 node_modules
```
## API 接口
### 认证相关
- `POST /auth/register` - 用户注册
- `POST /auth/login` - 用户登录
- `GET /auth/me` - 获取当前用户信息(需认证)
### 用户管理
- `GET /users` - 获取所有用户(需认证)
- `GET /users/:id` - 获取指定用户(需认证)
- `PATCH /users/:id` - 更新用户信息(需认证)
- `DELETE /users/:id` - 删除用户(需认证)
## 共享包使用
```typescript
// 导入类型
import type { User, ApiResponse } from '@seclusion/shared';
// 导入工具函数
import { formatDate, generateId } from '@seclusion/shared';
```