$npx -y skills add echoVic/boss-skill --skill tech-stack-detection检测项目技术栈的通用方法,通过分析配置文件识别语言、框架、工具链
| 1 | # 技术栈检测方法 |
| 2 | |
| 3 | ## 适用场景 |
| 4 | |
| 5 | 在进行技术选型、架构设计、代码生成前,需要先了解项目当前使用的技术栈,以便: |
| 6 | - 遵循项目现有的技术选择 |
| 7 | - 生成符合项目规范的代码 |
| 8 | - 避免引入不兼容的技术 |
| 9 | |
| 10 | ## 检测方法 |
| 11 | |
| 12 | ### 1. 检测配置文件 |
| 13 | |
| 14 | 使用 `Read` 或 `Glob` 工具检测项目根目录的配置文件: |
| 15 | |
| 16 | #### JavaScript/TypeScript 生态 |
| 17 | |
| 18 | | 文件 | 说明 | 检测内容 | |
| 19 | |------|------|----------| |
| 20 | | `package.json` | Node.js 项目配置 | dependencies, devDependencies, scripts | |
| 21 | | `tsconfig.json` | TypeScript 配置 | 确认使用 TypeScript | |
| 22 | | `next.config.js` | Next.js 配置 | 确认使用 Next.js | |
| 23 | | `vite.config.js` | Vite 配置 | 确认使用 Vite | |
| 24 | | `nuxt.config.js` | Nuxt 配置 | 确认使用 Nuxt | |
| 25 | |
| 26 | **检测命令**: |
| 27 | ```bash |
| 28 | # 检测是否存在 |
| 29 | ls package.json tsconfig.json next.config.js vite.config.js 2>/dev/null |
| 30 | |
| 31 | # 读取 package.json |
| 32 | Read(file_path: "package.json") |
| 33 | ``` |
| 34 | |
| 35 | **关键依赖识别**: |
| 36 | - `react`: React 项目 |
| 37 | - `vue`: Vue 项目 |
| 38 | - `next`: Next.js 项目 |
| 39 | - `@angular/core`: Angular 项目 |
| 40 | - `express`: Express 后端 |
| 41 | - `fastify`: Fastify 后端 |
| 42 | - `prisma`: Prisma ORM |
| 43 | - `typeorm`: TypeORM |
| 44 | |
| 45 | #### Python 生态 |
| 46 | |
| 47 | | 文件 | 说明 | 检测内容 | |
| 48 | |------|------|----------| |
| 49 | | `requirements.txt` | pip 依赖 | 依赖列表 | |
| 50 | | `pyproject.toml` | Poetry/PDM 配置 | 依赖和项目配置 | |
| 51 | | `Pipfile` | Pipenv 配置 | 依赖 | |
| 52 | | `setup.py` | 包配置 | 项目元数据 | |
| 53 | |
| 54 | **关键依赖识别**: |
| 55 | - `django`: Django 项目 |
| 56 | - `flask`: Flask 项目 |
| 57 | - `fastapi`: FastAPI 项目 |
| 58 | - `sqlalchemy`: SQLAlchemy ORM |
| 59 | - `pytest`: 使用 pytest 测试 |
| 60 | |
| 61 | #### Go 生态 |
| 62 | |
| 63 | | 文件 | 说明 | 检测内容 | |
| 64 | |------|------|----------| |
| 65 | | `go.mod` | Go 模块配置 | 依赖和 Go 版本 | |
| 66 | | `go.sum` | 依赖校验和 | 确认依赖锁定 | |
| 67 | |
| 68 | **关键依赖识别**: |
| 69 | - `github.com/gin-gonic/gin`: Gin 框架 |
| 70 | - `github.com/gofiber/fiber`: Fiber 框架 |
| 71 | - `gorm.io/gorm`: GORM ORM |
| 72 | |
| 73 | #### Rust 生态 |
| 74 | |
| 75 | | 文件 | 说明 | 检测内容 | |
| 76 | |------|------|----------| |
| 77 | | `Cargo.toml` | Cargo 配置 | 依赖和项目配置 | |
| 78 | | `Cargo.lock` | 依赖锁定 | 确认依赖版本 | |
| 79 | |
| 80 | **关键依赖识别**: |
| 81 | - `actix-web`: Actix Web 框架 |
| 82 | - `axum`: Axum 框架 |
| 83 | - `tokio`: 异步运行时 |
| 84 | |
| 85 | #### Java/Kotlin 生态 |
| 86 | |
| 87 | | 文件 | 说明 | 检测内容 | |
| 88 | |------|------|----------| |
| 89 | | `pom.xml` | Maven 配置 | 依赖和插件 | |
| 90 | | `build.gradle` | Gradle 配置 | 依赖和任务 | |
| 91 | |
| 92 | **关键依赖识别**: |
| 93 | - `spring-boot-starter`: Spring Boot 项目 |
| 94 | - `quarkus`: Quarkus 项目 |
| 95 | - `micronaut`: Micronaut 项目 |
| 96 | |
| 97 | #### Ruby 生态 |
| 98 | |
| 99 | | 文件 | 说明 | 检测内容 | |
| 100 | |------|------|----------| |
| 101 | | `Gemfile` | Bundler 配置 | 依赖 | |
| 102 | | `Gemfile.lock` | 依赖锁定 | 确认依赖版本 | |
| 103 | |
| 104 | **关键依赖识别**: |
| 105 | - `rails`: Ruby on Rails 项目 |
| 106 | - `sinatra`: Sinatra 项目 |
| 107 | |
| 108 | ### 2. 检测数据库配置 |
| 109 | |
| 110 | | 文件/目录 | 说明 | |
| 111 | |-----------|------| |
| 112 | | `prisma/schema.prisma` | Prisma 数据库配置 | |
| 113 | | `drizzle.config.ts` | Drizzle ORM 配置 | |
| 114 | | `ormconfig.json` | TypeORM 配置 | |
| 115 | | `alembic/` | Python Alembic 迁移 | |
| 116 | | `migrations/` | 数据库迁移目录 | |
| 117 | |
| 118 | **数据库类型识别**: |
| 119 | - `postgresql://`: PostgreSQL |
| 120 | - `mysql://`: MySQL |
| 121 | - `mongodb://`: MongoDB |
| 122 | - `sqlite:`: SQLite |
| 123 | - `redis://`: Redis |
| 124 | |
| 125 | ### 3. 检测部署配置 |
| 126 | |
| 127 | | 文件 | 说明 | |
| 128 | |------|------| |
| 129 | | `Dockerfile` | Docker 容器化 | |
| 130 | | `docker-compose.yml` | Docker Compose 多容器 | |
| 131 | | `vercel.json` | Vercel 部署 | |
| 132 | | `.github/workflows/` | GitHub Actions CI/CD | |
| 133 | | `netlify.toml` | Netlify 部署 | |
| 134 | | `railway.json` | Railway 部署 | |
| 135 | |
| 136 | ### 4. 检测测试框架 |
| 137 | |
| 138 | #### JavaScript/TypeScript |
| 139 | |
| 140 | | 文件/依赖 | 框架 | |
| 141 | |-----------|------| |
| 142 | | `jest.config.js` | Jest | |
| 143 | | `vitest.config.js` | Vitest | |
| 144 | | `playwright.config.js` | Playwright | |
| 145 | | `cypress.json` | Cypress | |
| 146 | |
| 147 | #### Python |
| 148 | |
| 149 | | 依赖 | 框架 | |
| 150 | |------|------| |
| 151 | | `pytest` | pytest | |
| 152 | | `unittest` | unittest (内置) | |
| 153 | |
| 154 | #### Go |
| 155 | |
| 156 | | 文件 | 框架 | |
| 157 | |------|------| |
| 158 | | `*_test.go` | Go 内置测试 | |
| 159 | |
| 160 | ## 检测流程 |
| 161 | |
| 162 | ### 步骤1:检测项目类型 |
| 163 | |
| 164 | ```bash |
| 165 | # 使用 Glob 查找配置文件 |
| 166 | Glob(pattern: "{package.json,go.mod,Cargo.toml,pom.xml,requirements.txt,Gemfile}") |
| 167 | ``` |
| 168 | |
| 169 | ### 步骤2:读取配置文件 |
| 170 | |
| 171 | ```bash |
| 172 | # 读取主配置文件 |
| 173 | Read(file_path: "package.json") # 或其他检测到的文件 |
| 174 | ``` |
| 175 | |
| 176 | ### 步骤3:分析依赖 |
| 177 | |
| 178 | 从配置文件中提取: |
| 179 | - **语言和版本**:如 Node.js 18, Python 3.11, Go 1.21 |
| 180 | - **主框架**:如 Next.js 14, Django 5.0, Gin |
| 181 | - **数据库**:如 PostgreSQL, MongoDB |
| 182 | - **ORM**:如 Prisma, SQLAlchemy, GORM |
| 183 | - **测试框架**:如 Jest, pytest |
| 184 | - **构建工具**:如 Vite, Webpack, esbuild |
| 185 | |
| 186 | ### 步骤4:输出检测结果 |
| 187 | |
| 188 | 以结构化格式输出: |
| 189 | |
| 190 | ```markdown |
| 191 | ## 技术栈检测结果 |
| 192 | |
| 193 | ### 语言和运行时 |
| 194 | - **语言**:TypeScript |
| 195 | - **运行时**:Node.js 20.x |
| 196 | - **包管理器**:pnpm |
| 197 | |
| 198 | ### 前端框架 |
| 199 | - **框架**:Next.js 14 (App Router) |
| 200 | - **UI 库**:React 18 |
| 201 | - **样式**:Tailwind CSS |
| 202 | - **状态管理**:Zustand |
| 203 | |
| 204 | ### 后端框架 |
| 205 | - **框架**:Next.js API Routes |
| 206 | - **ORM**:Prisma |
| 207 | - **数据库**:PostgreSQL |
| 208 | |
| 209 | ### 测试 |
| 210 | - **单元测试**:Vitest |
| 211 | - **E2E 测试**:Playwright |
| 212 | |
| 213 | ### 部署 |
| 214 | - **容器化**:Docker |
| 215 | - **CI/CD**:GitHub Actions |
| 216 | - **托管**:Vercel |
| 217 | ``` |
| 218 | |
| 219 | ## 使用示例 |
| 220 | |
| 221 | ### 示例1:检测 Next.js 项目 |
| 222 | |
| 223 | ```bash |
| 224 | # 1. 检测配置文件 |
| 225 | Glob(pattern: "package.json") |
| 226 | |
| 227 | # 2. 读取 package.json |
| 228 | Read(file_path: "package.json") |
| 229 | |
| 230 | # 3. 分析依赖 |
| 231 | # 发现: "next": "14.0.0", "react": "18.2.0", "prisma": "5.0.0" |
| 232 | |
| 233 | # 4. 输出结果 |
| 234 | 技术栈:Next.js 14 + React 18 + Prisma + PostgreSQL |
| 235 | ``` |
| 236 | |
| 237 | ### 示例2:检测 Python 项目 |
| 238 | |
| 239 | ```bash |
| 240 | # 1. 检测配置文件 |
| 241 | Glob(pattern: "{requirements.txt,pyproject.toml}") |
| 242 | |
| 243 | # 2. 读取配置 |
| 244 | Read(file_path: "pyproject.toml") |
| 245 | |
| 246 | # 3. 分析依赖 |
| 247 | # 发现: fastapi, sqlalchemy, pytest |
| 248 | |
| 249 | # 4. 输出结果 |
| 250 | 技术栈:FastAPI + SQLAlchemy + PostgreSQL + pytest |
| 251 | ``` |
| 252 | |
| 253 | ## 注意事项 |
| 254 | |
| 255 | 1. **优先检测现有项目**:如果项目已存在配置文件,必须遵循现有技术栈 |
| 256 | 2. **新项目才选型**:只有在没有配置文件时,才进行技术选型 |
| 257 | 3. **版本兼容性**:注意依赖之间的版本兼容性 |
| 258 | 4. **生态一致性**:不要混用不同生态的工具(如 npm + poetry) |
| 259 | |
| 260 | ## 常见错误 |
| 261 | |
| 262 | ❌ **不检测就假设**:直接假设项目使用某技术,而不检测配置文件 |
| 263 | ❌ **忽略版本**:只检测框架名称,不检测版本号 |
| 264 | ❌ **混淆生态**:在 Node.js 项目中推荐 Python 工具 |
| 265 | ❌ **重复检测* |