Skip to main content
ClaudeWave
Slash Command1k repo starsupdated 10d ago

project-scan

扫描项目生成配置(CLAUDE.md/restart.sh/ignore/Docker)

Install in Claude Code
Copy
mkdir -p ~/.claude/commands && curl -fsSL https://raw.githubusercontent.com/doccker/cc-use-exp/HEAD/.claude/commands/project-scan.md -o ~/.claude/commands/project-scan.md
Then start a new Claude Code session; the slash command loads automatically.

project-scan.md

扫描当前项目,自动识别技术栈并生成全套配置文件。

## ⚠️ 必须生成以下所有文件

| 序号 | 文件 | 用途 | 模板位置 |
|------|------|------|---------|
| 1 | `.claude/CLAUDE.md` | 项目配置 | 直接生成 |
| 2 | `restart.sh` | 前后端打包+启动脚本 | 直接生成 |
| 3 | `.claudeignore` | Claude Code 忽略 | 直接生成 |
| 4 | `.geminiignore` | Gemini CLI 忽略 | **必须生成**,内容复制自 `.claudeignore` |
| 5 | `.gitignore` | Git 忽略 | 直接生成 |
| 6 | `.dockerignore` | Docker 忽略 | 直接生成 |
| 7 | `Dockerfile` | 容器构建 | 直接生成 |
| 8 | `docker-compose.yml` | 容器编排 | 直接生成 |
| 9 | `README.md` | 项目说明 | 直接生成(如不存在或用户选择覆盖) |

---

## 忽略文件内容规范

### .claudeignore / .geminiignore(必须包含)

```
# 依赖目录
node_modules/
vendor/

# 构建产物
dist/
build/
*.exe

# IDE 和编辑器
.idea/
.vscode/
*.swp

# 系统文件
.DS_Store
Thumbs.db

# 日志和临时文件
*.log
tmp/

# MCP 插件缓存
.playwright-mcp/

# 数据库文件(按需)
*.db
*.sqlite
```

### .gitignore(在上述基础上增加)

```
# 环境配置
.env
.env.local

# 敏感文件
*.pem
*.key
```

### .dockerignore(在上述基础上增加)

```
# Git
.git/
.gitignore

# 文档
*.md
LICENSE

# 测试
*_test.go
__tests__/
```

---

## 执行步骤

### 步骤 1:扫描项目类型

检测文件确定技术栈:

| 检测文件 | 项目类型 |
|---------|---------|
| `go.mod` | Go |
| `pom.xml` | Java + Maven |
| `build.gradle` | Java + Gradle |
| `package.json` | Node.js / 前端 |
| `web/` 或 `frontend/` 目录 | 前后端分离 |

检测数据库依赖(在 go.mod 或代码中搜索):

| 关键词 | 依赖 |
|--------|------|
| `sqlite` | SQLite |
| `mysql` | MySQL |
| `postgres` | PostgreSQL |
| `redis`, `go-redis` | Redis |

### 步骤 2:显示扫描结果并确认

```
## 项目扫描结果

**项目类型**: [检测结果]
**数据库**: [检测结果]
**前后端分离**: [是/否]

即将生成 9 个文件,是否继续?[Y/n]
```

### 步骤 3:逐个生成文件

对于每个文件:

1. **检查是否存在**
2. **如已存在** → 询问用户:
   ```
   文件 [filename] 已存在,请选择:
   1. 覆盖
   2. 跳过
   ```
3. **如不存在** → 读取对应模板,根据项目类型调整后生成

**模板选择规则**:

| 项目类型 | restart.sh | Dockerfile | docker-compose.yml |
|---------|------------|------------|-------------------|
| Go | `restart-go.sh.tmpl` | `Dockerfile-go.tmpl` | 根据数据库选择 |
| Go + 前端 | `restart-go.sh.tmpl` | `Dockerfile-go-frontend.tmpl` | 根据数据库选择 |
| Java | `restart-java.sh.tmpl` | 自行生成 | 根据数据库选择 |

| 数据库 | docker-compose 模板 |
|--------|-------------------|
| SQLite | `docker-compose-sqlite.yml.tmpl` |
| MySQL | `docker-compose-mysql.yml.tmpl` |
| Redis | `docker-compose-redis.yml.tmpl` |
| MySQL + Redis | 合并两个模板 |

### 步骤 4:设置执行权限

```bash
chmod +x restart.sh
```

### 步骤 5:输出摘要

```
## 生成完成

已生成文件:
✅ .claude/CLAUDE.md
✅ restart.sh
✅ .claudeignore
✅ .geminiignore
✅ .gitignore
✅ .dockerignore
✅ Dockerfile
✅ docker-compose.yml
✅ README.md

跳过文件:
⏭️ [用户选择跳过的文件]

下一步:
1. 检查生成的文件是否符合项目实际情况
2. 修改 docker-compose.yml 中的默认密码
3. 测试 ./restart.sh 是否正常工作
```

---

## restart.sh 使用说明

```bash
# 默认管理员账密
./restart.sh

# 自定义管理员账密
ADMIN_USER=myuser ADMIN_PASS=mypass ./restart.sh
```

---

## 注意事项

- 生成后务必检查文件内容是否符合项目实际
- `docker-compose.yml` 中的密码应在生产环境修改
- 如项目结构特殊,可能需要手动调整模板

---

## README.md 生成规范

### ⚠️ 增量更新原则(重要)

**如果 README.md 已存在**,必须遵循以下规则:

1. **读取现有内容**,识别 `<!-- AUTO:xxx -->` 标记的区块
2. **只更新标记区块**内的内容,保留区块外的手写内容
3. **无标记区块时**,询问用户:
   ```
   README.md 已存在且无自动更新标记。请选择:
   1. 全量覆盖(推荐首次使用)
   2. 追加标记区块到文件末尾
   3. 跳过 README.md
   ```

### 可用的标记区块

| 标记 | 内容 | 说明 |
|------|------|------|
| `<!-- AUTO:tech-stack -->` | 技术栈表格 | 自动检测语言、框架、数据库版本 |
| `<!-- AUTO:directory -->` | 项目结构 | 扫描目录生成树形结构 |
| `<!-- AUTO:quick-start -->` | 快速开始 | 环境要求、启动命令 |
| `<!-- AUTO:docker -->` | Docker 部署 | docker-compose 命令 |

### 标记区块格式

```markdown
<!-- AUTO:tech-stack -->
## 技术栈
| 层级 | 技术 | 版本 |
|------|------|------|
| 框架 | Gin | 1.9 |
...
<!-- /AUTO:tech-stack -->
```

### 更新逻辑

```
1. 读取现有 README.md
2. 用正则匹配 <!-- AUTO:xxx --> ... <!-- /AUTO:xxx -->
3. 替换匹配区块内的内容
4. 保留区块外的所有手写内容
5. 写回文件
```

### 首次生成的章节模板

```markdown
# [项目名称]

## 项目概述

<!-- 手写区域:根据代码分析生成项目描述 -->

### 核心功能

- **功能1**: 描述
- **功能2**: 描述
...

<!-- AUTO:tech-stack -->
## 技术栈

### 后端

| 层级 | 技术 | 版本 |
|------|------|------|
| 框架 | [检测到的框架] | [版本] |
| 语言 | [Go/Java/...] | [版本] |
| ORM | [检测到的ORM] | [版本] |
| 数据库 | [检测到的数据库] | [版本] |
| 缓存 | [如有] | [版本] |
| 构建 | [Maven/Go/...] | - |

### 前端(如有)

| 层级 | 技术 | 版本 |
|------|------|------|
| 框架 | [Vue/React/...] | [版本] |
| 语言 | TypeScript | [版本] |
| UI 组件库 | [Element Plus/Ant Design/...] | [版本] |
| 构建 | Vite | [版本] |
<!-- /AUTO:tech-stack -->

<!-- AUTO:directory -->
## 项目结构

```
[项目名]/
├── [目录1]/                # 说明
├── [目录2]/                # 说明
└── ...
```
<!-- /AUTO:directory -->

<!-- AUTO:quick-start -->
## 快速开始

### 环境要求

- [语言] [版本]+
- [数据库] [版本]+
- Node.js 18+ (前端开发,如有)

### 后端启动

```bash
# 克隆项目
git clone <repository-url>
cd [项目名]

# [根据项目类型生成启动命令]
```

### 前端启动(如有)

```bash
cd [前端目录]
npm install
npm run dev
```

### 访问地址

| 服务 | 地址 |
|------|------|
| 前端 | http://localhost:[端口] |
| 后端 API | http://localhost:[端口]/api |
<!-- /AUTO:quick-start -->

<!-- AUTO:docker -->
## Docker 部署

```bash
# 启动
docker-compose up -d
```
<!-- /AUTO:docker -->

## 许可证

[LICENSE](./LICENSE)
```

### 生成原则

1. **版本号**:从 `go.mod`、`pom.xml`、`package.json` 中提取
2. **项目结构**:扫描实际目录生成,只列出主要目录
3. **端口号**:从配置文件中提取,或使用默认值
4. **功能描述**:根据代码结构和命名推断
api-design-safetySkill

当设计或修改 REST API 响应结构、处理 API 返回值,或生成 Excel/CSV/PDF/对账文件等下游产物时触发。防止 API 设计缺陷导致的字段错位、类型歧义,以及生成产物时关键字段缺失但静默成功的问题。

api-proxy-safetySkill

网关/代理/WAF/CDN 中间件的安全关键词匹配实现规范,防止纯子串匹配误判正常响应内容中的技术术语(如 Cloudflare、502、error)

async-task-patternSkill

当 API/任务可能执行超过 10 秒(批量数据处理、远程 API 批量调用、全表扫描、跨租户聚合)时触发。防止同步接口被网关 30s 超时切断、用户重复点击触发并发、状态缓存内存泄漏等问题。提供异步任务状态机标准模板。

bash-styleSkill

当用户操作 .sh、Dockerfile、Makefile、.yml、.yaml 文件,或在 Markdown 中编写 bash 代码块时触发。提供 Bash 编写规范。

code-quality-principlesSkill

当编写新模块、设计接口、重构代码或代码审查时触发。提供经典模块化六原则检查清单(大小适中/调用深度/扇入扇出/边界清晰/作用域内聚/可预测性),适用于 PR/Review/新模块设计场景。

external-system-debuggingSkill

涉及浏览器、编辑器、CDN/WAF、IM 平台、操作系统剪贴板、第三方 SaaS 等"外部黑盒系统"的代码编写或 bug 调试时触发。强制先抓真实环境数据再推理,避免连续 2 轮"凭代码推理"的修复 no-op。关键词:粘贴/复制异常、跨平台显示不一致、第三方 API 怪结果、CDN/WAF 拦截、本地复现失败、HTML→MD 转换丢属性。

field-mapping-safetySkill

当重构涉及字段映射(dataIndex、枚举映射、类型转换)时触发。防止字段名推测错误,确保字段映射的正确性。

frontend-devSkill

前端开发规范,包含 Vue 3 编码规范、UI 风格约束、TypeScript 规范等