{"id":28380607,"url":"https://github.com/cycleccc/next-nest-monorepo","last_synced_at":"2025-09-01T20:07:24.617Z","repository":{"id":292114310,"uuid":"979838413","full_name":"cycleccc/next-nest-monorepo","owner":"cycleccc","description":"next、nest、ts-rest、drizzle","archived":false,"fork":false,"pushed_at":"2025-05-12T09:41:08.000Z","size":1278,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-24T21:40:57.614Z","etag":null,"topics":["authjs","drizzle-orm","nestjs","next15","shadn-ui","ts-rest"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cycleccc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-08T06:34:26.000Z","updated_at":"2025-05-12T09:41:11.000Z","dependencies_parsed_at":"2025-06-24T21:46:44.896Z","dependency_job_id":null,"html_url":"https://github.com/cycleccc/next-nest-monorepo","commit_stats":null,"previous_names":["cycleccc/next-nest-monorepo"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/cycleccc/next-nest-monorepo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cycleccc%2Fnext-nest-monorepo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cycleccc%2Fnext-nest-monorepo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cycleccc%2Fnext-nest-monorepo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cycleccc%2Fnext-nest-monorepo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cycleccc","download_url":"https://codeload.github.com/cycleccc/next-nest-monorepo/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cycleccc%2Fnext-nest-monorepo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273183228,"owners_count":25059812,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-01T02:00:09.058Z","response_time":120,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["authjs","drizzle-orm","nestjs","next15","shadn-ui","ts-rest"],"created_at":"2025-05-30T03:08:50.677Z","updated_at":"2025-09-01T20:07:24.569Z","avatar_url":"https://github.com/cycleccc.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"（Next.js、NestJS、ts-rest、Drizzle、Biome）非常现代化，适合构建全栈应用。在 monorepo 架构下，合理组织这些技术有助于提高开发效率、模块复用性和部署一致性。\n\n下面是一个推荐的架构设计方案，结合你提到的每项技术：\n\n---\n\n## 🏗️ Monorepo 架构建议\n\n### ✅ 使用工具\n\n* **包管理器**：`pnpm`（强烈推荐，支持 workspace）\n* **构建/任务管理**：`Turbo`（用于缓存和并行化构建/测试/部署任务）\n* **代码规范/格式化**：`Biome`（替代 ESLint + Prettier + lint-staged）\n* **类型检查**：TypeScript 全项目统一\n* **环境变量管理**：使用 `dotenv` 和 `env-schema`\n\n---\n\n## 📁 项目结构\n\n```\nmy-monorepo/\n├── apps/                    # 应用目录\n│   ├── web/                # 前端应用 (Next.js + ts-rest)\n│   └── server/             # 后端服务 (NestJS + ts-rest + Drizzle)\n├── packages/               # 共享包目录\n│   ├── contracts/         # ts-rest 契约定义\n│   └── db/               # Drizzle schema + db client\n├── .vscode/              # VS Code 配置\n├── .turbo/               # Turborepo 缓存\n├── node_modules/         # 依赖目录\n├── .gitignore           # Git 忽略配置\n├── biome.json           # Biome 配置\n├── package.json         # 项目配置\n├── pnpm-lock.yaml       # pnpm 锁文件\n├── pnpm-workspace.yaml  # pnpm 工作空间配置\n├── tsconfig.json        # TypeScript 配置\n└── turbo.json           # Turborepo 配置\n```\n\n---\n\n## 🔧 各部分说明与整合方式\n\n### `apps/web` （Next.js）\n\n* 使用 **App Router** + React Server Component（可选）\n* 集成 **ts-rest client** 来调用服务端 API（可在 SSR 和客户端使用）\n* 使用 `@my-monorepo/contracts` 中定义的契约\n* 使用 `@my-monorepo/ui` 的组件\n\n### `apps/server` （NestJS）\n\n* 核心 API 服务\n* 使用 `ts-rest` 作为 API 契约和实现\n* 数据访问用 `Drizzle ORM`（支持 PostgreSQL、SQLite、MySQL 等）\n* 环境变量管理建议统一用 `dotenv` + 校验库（如 `zod`）\n\n### `packages/contracts`\n\n* 存放 ts-rest 的 API 契约定义\n* 前后端共享类型定义和 API 接口规范\n\n### `packages/db`\n\n* 定义 Drizzle 的 schema 与 migrations\n* 输出 `db` 实例供 NestJS 使用\n\n### `packages/ui`\n\n* Tailwind + Radix UI / shadcn/ui（可选）\n* 提供跨项目可复用组件\n\n### `packages/config`\n\n* tsconfig、biome config、turbo config、lint-staged、prettier（如果还用）、jest、vitest 等共享配置\n\n---\n\n## 🛠️ 技术整合注意事项\n\n* **ts-rest**：\n\n  * 在 `packages/api` 中定义 API 契约\n  * 在 NestJS 中使用 `@ts-rest/nest` 实现 API\n  * 在 Next.js 中使用 `@ts-rest/core` 和 `@ts-rest/react-query` 进行客户端调用\n  * 确保前后端类型一致性\n\n* **Drizzle**：\n\n  * schema 和 `migrate` 脚本集中在 `packages/db`，NestJS 中引入即可\n  * `drizzle-kit` 配置文件推荐放在 `packages/db/drizzle.config.ts`\n\n* **Biome**：\n\n  * 配置放在 `packages/config/biome.json`，在各个项目里使用 `extends`\n  * 也可以加 `format`, `lint` 脚本统一执行\n\n---\n\n## 🚀 Turbo 构建任务配置示意\n\n```jsonc\n// turbo.json\n{\n  \"pipeline\": {\n    \"build\": {\n      \"dependsOn\": [\"^build\"],\n      \"outputs\": [\"dist/**\", \".next/**\"]\n    },\n    \"dev\": {\n      \"cache\": false\n    },\n    \"lint\": {\n      \"outputs\": []\n    },\n    \"format\": {\n      \"outputs\": []\n    },\n    \"test\": {\n      \"outputs\": [\"coverage/**\"]\n    }\n  }\n}\n```\n\n## 📝 开发命令说明\n\n### 安装依赖\n```bash\n# 安装所有依赖\npnpm install\n\n# 安装特定包的依赖\npnpm --filter \u003cpackage-name\u003e install\n```\n\n### 开发命令\n```bash\n# 启动所有项目开发服务\npnpm dev\n\n# 启动特定项目开发服务\npnpm --filter \u003cpackage-name\u003e dev\n\n# 启动 web 应用开发服务\npnpm --filter web dev\n\n# 启动 server 开发服务\npnpm --filter server dev\n```\n\n### 构建命令\n```bash\n# 构建所有项目\npnpm build\n\n# 构建特定项目\npnpm --filter \u003cpackage-name\u003e build\n\n# 构建 web 应用\npnpm --filter web build\n\n# 构建 server\npnpm --filter server build\n```\n\n### 代码质量\n```bash\n# 运行所有项目的 lint\npnpm lint\n\n# 运行所有项目的格式化\npnpm format\n\n# 运行所有项目的测试\npnpm test\n\n# 运行特定项目的测试\npnpm --filter \u003cpackage-name\u003e test\n```\n\n### 包管理\n```bash\n# 添加依赖到特定包\npnpm --filter \u003cpackage-name\u003e add \u003cpackage\u003e\n\n# 添加开发依赖到特定包\npnpm --filter \u003cpackage-name\u003e add -D \u003cpackage\u003e\n\n# 移除特定包的依赖\npnpm --filter \u003cpackage-name\u003e remove \u003cpackage\u003e\n```\n\n### 常用工作流\n```bash\n# 1. 安装依赖\npnpm install\n\n# 2. 启动开发服务（web + server）\npnpm dev\n\n# 3. 构建生产版本\npnpm build\n\n# 4. 运行测试\npnpm test\n```\n\n---\n\n## ✅ 环境变量管理建议\n\n* 每个 `apps` 下放 `.env.local`\n* 用 `env-schema` + `zod`（或 `@nestjs/config` 自带的 validation）进行校验\n* 可以定义统一的环境变量类型定义在 `packages/config/env.ts`\n\n\n---","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcycleccc%2Fnext-nest-monorepo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcycleccc%2Fnext-nest-monorepo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcycleccc%2Fnext-nest-monorepo/lists"}