chore: migrate to pnpm workspaces monorepo with Turborepo

- Restructure directories: apps/api, apps/admin, apps/website
- Add root pnpm-workspace.yaml, turbo.json, .prettierrc, .gitignore
- Rename packages to @inkreach/api, @inkreach/admin, @inkreach/website
- Add shared packages: packages/tsconfig, packages/shared-types
- Add pnpm.onlyBuiltDependencies for native builds
- Update docs: README.md, structs.md
- All three projects build successfully
This commit is contained in:
yeuimu
2026-07-11 16:54:05 +08:00
parent 69945b8749
commit 7e04877bb6
155 changed files with 20134 additions and 14393 deletions
+63 -46
View File
@@ -1,39 +1,24 @@
# InkReach Product Center
InkReach 官方产品中心项目,包含三个协同工作的子项目:
pnpm workspaces + Turborepo monorepo,包含三个协同工作的子项目和共享包
| 子项目 | 技术栈 | 端口 | 角色 |
|--------|--------|------|------|
| `inkreach-official-nestjs` | NestJS 10 + Prisma 5 + PostgreSQL | 3001 | 后端 API(鉴权 / CRUD / SDS 同步 / 公开 API / Swagger |
| `inkreach-official-admin` | Vue 3 + Vite + Element Plus + Pinia | 5173 | 后台管理(登录 / 商品 / 品类 / 国家 / 标签 / 坑位 / 同步) |
| `inkreach-official-website` | Nuxt 4 + Vue 3 + Tailwind v4 | 3000 | 官方展示站 + 产品中心页 |
| 子项目 | 包名 | 技术栈 | 端口 | 角色 |
|--------|------|--------|------|------|
| `apps/api` | `@inkreach/api` | NestJS 10 + Prisma 5 + PostgreSQL | 3001 | 后端 API(鉴权 / CRUD / SDS 同步 / 公开 API / Swagger |
| `apps/admin` | `@inkreach/admin` | Vue 3 + Vite + Element Plus + Pinia | 5173 | 后台管理(登录 / 商品 / 品类 / 国家 / 标签 / 坑位 / 同步) |
| `apps/website` | `@inkreach/website` | Nuxt 4 + Vue 3 + Tailwind v4 | 3000 | 官方展示站 + 产品中心页 |
| 共享包 | 说明 |
|--------|------|
| `packages/tsconfig` | 共享 TypeScript 配置(base / api / vue |
| `packages/shared-types` | 共享类型定义(PaginatedResult, BackendEnvelope, 实体接口) |
## 快速开始
### 1. 启动顺序
后端必须先于前两个子项目启动,否则前端代理会失败。
### 1. 安装依赖
```bash
# Terminal 1:后端(需要 PostgreSQL
cd inkreach-official-nestjs
npm install
npm run prisma:generate
npm run prisma:migrate
npm run start:dev
# → http://localhost:3001 · Swagger: http://localhost:3001/api/docs
# Terminal 2:官网
cd inkreach-official-website
npm install
npm run dev
# → http://localhost:3000
# Terminal 3:后台
cd inkreach-official-admin
npm install
npm run dev
# → http://localhost:5173
pnpm install
```
### 2. 环境变量
@@ -44,7 +29,7 @@ npm run dev
DATABASE_URL=postgresql://postgres:<password>@localhost:5432/inkreach-official
```
后端额外需要的变量(在 `inkreach-official-nestjs/.env` 中):
后端额外需要的变量(在 `apps/api/.env` 中):
```env
JWT_SECRET=<your-secret>
@@ -53,17 +38,44 @@ SDS_API_KEY=<your-key>
PORT=3001
```
官网默认通过 `NUXT_PUBLIC_BACKEND_URL=http://localhost:3001` 指向后端,可写入 `inkreach-official-website/.env` 覆盖
官网通过 `apps/website/.env` `NUXT_PUBLIC_BACKEND_URL=http://localhost:3001` 指向后端。
后台无需额外环境变量;Vite 代理已把 `/api/*` 转给 `http://localhost:3001`
### 3. 启动
启动顺序:先启动后端,再启动另两个。
```bash
# Terminal 1:后端(需要 PostgreSQL
cd apps/api
pnpm prisma:generate
pnpm prisma:migrate
pnpm start:dev
# → http://localhost:3001 · Swagger: http://localhost:3001/api/docs
# Terminal 2:官网
pnpm --filter @inkreach/website dev
# → http://localhost:3000
# Terminal 3:后台
pnpm --filter @inkreach/admin dev
# → http://localhost:5173
```
或者使用 Turborepo 同时启动所有开发服务器:
```bash
pnpm dev # turbo run dev
```
## 端口分配
| 端口 | 项目 | 入口 |
|------|------|------|
| 3001 | NestJS 后端 | `inkreach-official-nestjs/src/main.ts` |
| 5173 | Vue Admin | `inkreach-official-admin/vite.config.ts` |
| 3000 | Nuxt 官网 | `inkreach-official-website/nuxt.config.ts` |
| 3001 | NestJS 后端 | `apps/api/src/main.ts` |
| 5173 | Vue Admin | `apps/admin/vite.config.ts` |
| 3000 | Nuxt 官网 | `apps/website/nuxt.config.ts` |
## 数据流概览
@@ -81,23 +93,28 @@ PORT=3001
## 常用命令
```bash
# 根目录(使用 pnpm workspace filter
pnpm install # 安装所有依赖
pnpm dev # 启动所有 dev 服务器 (turbo)
pnpm build # 构建所有项目 (turbo)
pnpm format # 格式化所有文件 (prettier)
# 后端
cd inkreach-official-nestjs
npm run start:dev # 开发
npm run build # 编译
npm run test # 单元测试
npm run prisma:studio # 打开 Prisma Studio
pnpm --filter @inkreach/api start:dev # 开发
pnpm --filter @inkreach/api build # 编译
pnpm --filter @inkreach/api test # 单元测试
pnpm --filter @inkreach/api prisma:generate # 生成 Prisma Client
pnpm --filter @inkreach/api prisma:migrate # 运行迁移
pnpm --filter @inkreach/api prisma:studio # 打开 Prisma Studio
# 官网
cd inkreach-official-website
npm run dev # 开发
npm run build # 构建
npm run generate # 静态站点生成
pnpm --filter @inkreach/website dev # 开发
pnpm --filter @inkreach/website build # 构建
pnpm --filter @inkreach/website generate # 静态站点生成
# 后台
cd inkreach-official-admin
npm run dev # 开发
npm run build # 构建(含 vue-tsc 类型检查)
pnpm --filter @inkreach/admin dev # 开发
pnpm --filter @inkreach/admin build # 构建
```
## 文档
@@ -105,5 +122,5 @@ npm run build # 构建(含 vue-tsc 类型检查)
- 整体目录结构:[`docs/references/structs.md`](docs/references/structs.md)
- 数据库表设计:[`docs/dev/database-table-design.md`](docs/dev/database-table-design.md)
- 产品中心 PRD[`docs/dev/product-center-prd.md`](docs/dev/product-center-prd.md)
- 官网子项目结构:[`inkreach-official-website/docs/references/structs.md`](inkreach-official-website/docs/references/structs.md)
- 官网子项目结构:[`apps/website/docs/references/structs.md`](apps/website/docs/references/structs.md)
- 开发规范:[`AGENTS.md`](AGENTS.md)