扩展 /project-scan 支持生成常用文件 .claudeignore .gitignore .dockerignore Dockerfile docker-compose.yml

This commit is contained in:
wwj committed 2026-01-04 21:24:43 +08:00
1 parent 4838b9e549
commit 82af4a075a
12 files changed
+507 -76

No files matched your search

+109 -75
View File
@@ -1,97 +1,131 @@
---
description: 扫描已有项目并生成 CLAUDE.md 配置
allowed-tools: Read, Glob, Grep, Bash(ls:*), Bash(cat:*), Bash(head:*)
description: 扫描项目生成配置(CLAUDE.md/restart.sh/ignore/Docker)
---
扫描当前项目,自动识别技术栈并生成 `.claude/CLAUDE.md` 配置。
扫描当前项目,自动识别技术栈并生成全套配置文件。
## 扫描步骤
## ⚠️ 必须生成以下所有文件
### 1. 识别项目类型
| 序号 | 文件 | 用途 | 模板位置 |
|------|------|------|---------|
| 1 | `.claude/CLAUDE.md` | 项目配置 | 直接生成 |
| 2 | `restart.sh` | 前后端打包+启动脚本 | `templates/restart-*.sh.tmpl` |
| 3 | `.claudeignore` | Claude Code 忽略 | `templates/claudeignore.tmpl` |
| 4 | `.gitignore` | Git 忽略 | `templates/gitignore-*.tmpl` |
| 5 | `.dockerignore` | Docker 忽略 | `templates/dockerignore.tmpl` |
| 6 | `Dockerfile` | 容器构建 | `templates/Dockerfile-*.tmpl` |
| 7 | `docker-compose.yml` | 容器编排 | `templates/docker-compose-*.yml.tmpl` |
检查以下文件确定技术栈:
---
| 文件 | 技术栈 |
|------|--------|
## 执行步骤
### 步骤 1:扫描项目类型
检测文件确定技术栈:
| 检测文件 | 项目类型 |
|---------|---------|
| `go.mod` | Go |
| `pom.xml` | Java + Maven |
| `build.gradle` | Java + Gradle |
| `package.json` | Node.js / 前端 |
| `requirements.txt` | Python |
| `Cargo.toml` | Rust |
| `web/` 或 `frontend/` 目录 | 前后端分离 |
### 2. 识别框架
检测数据库依赖(在 go.mod 或代码中搜索):
**Go 项目**:
- 检查 `go.mod` 中的依赖:`gin`、`echo`、`fiber`、`gorm` 等
| 关键词 | 依赖 |
|--------|------|
| `sqlite` | SQLite |
| `mysql` | MySQL |
| `postgres` | PostgreSQL |
| `redis`, `go-redis` | Redis |
**Java 项目**:
- 检查 `pom.xml` 或 `build.gradle` 中的依赖:`spring-boot`、`mybatis` 等
### 步骤 2:显示扫描结果并确认
**前端项目**:
- 检查 `package.json` 中的依赖:`vue`、`react`、`element-plus`、`ant-design` 等
```
## 项目扫描结果
### 3. 识别目录结构
**项目类型**: [检测结果]
**数据库**: [检测结果]
**前后端分离**: [是/否]
扫描项目根目录,识别:
- 源码目录:`src/`、`internal/`、`pkg/`、`web/`
- 配置文件:`config/`、`.env`、`application.yml`
- 测试目录:`test/`、`tests/`、`__tests__/`
- 脚本文件:`restart.sh`、`Makefile`、`docker-compose.yml`
### 4. 识别启动方式
按优先级检查:
1. `restart.sh` → `./restart.sh`
2. `docker-compose.yml` → `docker-compose up`
3. `Makefile` → 检查 `run` 或 `dev` 目标
4. `package.json` scripts → `npm run dev`
5. `go.mod` → `go run main.go`
6. `pom.xml` → `mvn spring-boot:run`
### 5. 生成配置
基于扫描结果,生成 `.claude/CLAUDE.md`:
```markdown
# [项目名] 项目配置
作者:wwj
## 项目概述
[根据 README.md 或目录结构推断]
## 技术栈
| 层级 | 技术 | 版本 |
|------|------|------|
| [识别到的技术栈] |
## 目录结构
[扫描到的目录结构]
## 项目定制
| 约定 | 说明 |
|------|------|
| 启动方式 | [识别到的启动方式] |
| [其他识别到的约定] |
## 与 Claude Code 协作
[标准模板]
即将生成 7 个文件,是否继续?[Y/n]
```
## 输出
### 步骤 3:逐个生成文件
1. 显示扫描结果摘要
2. 生成 `.claude/CLAUDE.md` 文件
3. 提示用户检查并调整
对于每个文件:
## 注意
1. **检查是否存在**
2. **如已存在** → 询问用户:
```
文件 [filename] 已存在,请选择:
1. 覆盖
2. 跳过
```
3. **如不存在** → 读取对应模板,根据项目类型调整后生成
- 如果已存在 `.claude/CLAUDE.md`,先询问是否覆盖
- 无法识别的部分用 `[待补充]` 标记
- 生成后提示用户检查技术栈版本是否正确
**模板选择规则**:
| 项目类型 | 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
✅ .gitignore
✅ .dockerignore
✅ Dockerfile
✅ docker-compose.yml
跳过文件:
⏭️ [用户选择跳过的文件]
下一步:
1. 检查生成的文件是否符合项目实际情况
2. 修改 docker-compose.yml 中的默认密码
3. 测试 ./restart.sh 是否正常工作
```
---
## restart.sh 使用说明
```bash
# 默认管理员账密
./restart.sh
# 自定义管理员账密
ADMIN_USER=myuser ADMIN_PASS=mypass ./restart.sh
```
---
## 注意事项
- 生成后务必检查文件内容是否符合项目实际
- `docker-compose.yml` 中的密码应在生产环境修改
- 如项目结构特殊,可能需要手动调整模板
@@ -0,0 +1,25 @@
# 前端构建阶段
FROM node:20-alpine AS frontend
WORKDIR /app/web
COPY web/package*.json ./
RUN npm install
COPY web/ .
RUN npm run build
# 后端构建阶段
FROM golang:1.21-alpine AS backend
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -o server ./cmd/server
# 运行阶段
FROM alpine:latest
RUN apk --no-cache add ca-certificates tzdata
ENV TZ=Asia/Shanghai
WORKDIR /app
COPY --from=backend /app/server .
COPY --from=frontend /app/web/dist ./web/dist
EXPOSE 8080
CMD ["./server"]
+16
View File
@@ -0,0 +1,16 @@
# 构建阶段
FROM golang:1.21-alpine AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -o server ./cmd/server
# 运行阶段
FROM alpine:latest
RUN apk --no-cache add ca-certificates tzdata
ENV TZ=Asia/Shanghai
WORKDIR /app
COPY --from=builder /app/server .
EXPOSE 8080
CMD ["./server"]
+74
View File
@@ -0,0 +1,74 @@
# .claudeignore - Claude Code 分析时忽略的文件
# 第三方依赖
node_modules/
vendor/
# 构建产物
build/
dist/
bin/
*.app
# 锁文件(无分析价值)
package-lock.json
go.sum
# 数据库文件
*.db
*.sqlite
*.sqlite3
data/*.db
data/*.sqlite
# 日志文件
*.log
server.log
logs/
# 环境配置(敏感)
.env
.env.local
.env.*.local
# Git 内部目录
.git/
# 压缩/混淆文件
*.min.js
*.min.css
# 二进制文件
*.exe
*.dll
*.so
*.dylib
*.test
# 静态资源
*.png
*.jpg
*.jpeg
*.gif
*.ico
*.svg
*.woff
*.woff2
*.ttf
*.eot
# IDE 和编辑器
.idea/
.vscode/
*.swp
*.swo
*~
# 系统文件
.DS_Store
Thumbs.db
# 临时文件
tmp/
temp/
*.tmp
@@ -0,0 +1,32 @@
version: '3.8'
services:
app:
build: .
ports:
- "8080:8080"
depends_on:
- mysql
environment:
- DB_HOST=mysql
- DB_PORT=3306
- DB_USER=app
- DB_PASS=app123
- DB_NAME=appdb
- ADMIN_USER=${ADMIN_USER:-admin}
- ADMIN_PASS=${ADMIN_PASS:-admin123}
restart: unless-stopped
mysql:
image: mysql:8.0
environment:
- MYSQL_ROOT_PASSWORD=root123
- MYSQL_DATABASE=appdb
- MYSQL_USER=app
- MYSQL_PASSWORD=app123
volumes:
- mysql_data:/var/lib/mysql
restart: unless-stopped
volumes:
mysql_data:
@@ -0,0 +1,24 @@
version: '3.8'
services:
app:
build: .
ports:
- "8080:8080"
depends_on:
- redis
environment:
- REDIS_HOST=redis
- REDIS_PORT=6379
- ADMIN_USER=${ADMIN_USER:-admin}
- ADMIN_PASS=${ADMIN_PASS:-admin123}
restart: unless-stopped
redis:
image: redis:7-alpine
volumes:
- redis_data:/data
restart: unless-stopped
volumes:
redis_data:
@@ -0,0 +1,13 @@
version: '3.8'
services:
app:
build: .
ports:
- "8080:8080"
volumes:
- ./data:/app/data
environment:
- ADMIN_USER=${ADMIN_USER:-admin}
- ADMIN_PASS=${ADMIN_PASS:-admin123}
restart: unless-stopped
+55
View File
@@ -0,0 +1,55 @@
# Git
.git
.gitignore
# Build artifacts
build/
dist/
*.exe
*.exe~
*.dll
*.so
*.dylib
# Test binary
*.test
# Output of go coverage tool
*.out
# Data directory (will be mounted as volume)
data/
# Environment files
.env
.env.local
.env.*.local
# IDE
.vscode/
.idea/
*.swp
*.swo
*~
# OS
.DS_Store
Thumbs.db
# Logs
*.log
# Documentation
README.md
docs/
# CI/CD
.github/
# Docker (avoid recursion)
docker-compose.yml
Dockerfile
.dockerignore
# Node modules (if any)
node_modules/
+80
View File
@@ -0,0 +1,80 @@
# Binaries for programs and plugins
*.exe
*.exe~
*.dll
*.so
*.dylib
# Test binary, built with `go test -c`
*.test
# Output of the go coverage tool
*.out
# Go workspace file
go.work
# Build artifacts
build/
dist/
bin/
*.app
# Dependency directories
vendor/
# Go build cache
.cache/
# Environment files
.env
.env.local
.env.*.local
# Database files
*.db
*.sqlite
*.sqlite3
data/*.db
data/*.sqlite
# Log files
*.log
server.log
logs/
# IDE and editor directories
.idea/
.vscode/
*.swp
*.swo
*~
.DS_Store
# OS generated files
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
# Temporary files
tmp/
temp/
*.tmp
# Node modules (for frontend)
node_modules/
package-lock.json
# Compiled binaries
server
cmd/server/server
# Admin config (may contain sensitive data)
data/admin_config.json
# Scripts runtime artifacts
*.pid
+41
View File
@@ -0,0 +1,41 @@
#!/usr/bin/env bash
set -euo pipefail
# 管理员配置(通过环境变量设置)
ADMIN_USER="${ADMIN_USER:-admin}"
ADMIN_PASS="${ADMIN_PASS:-admin123}"
# 1. 拉取最新代码
echo "==> 拉取最新代码..."
git pull origin main || true
# 2. 前端打包(如有 web/ 目录)
if [[ -d "web" ]]; then
echo "==> 构建前端..."
cd web
npm install
npm run build
cd ..
fi
# 3. 后端编译
echo "==> 编译后端..."
go build -o ./bin/server ./cmd/server
# 4. 停止旧进程
echo "==> 停止旧进程..."
pkill -f "./bin/server" || true
sleep 1
# 5. 启动新进程
echo "==> 启动服务..."
ADMIN_USER="$ADMIN_USER" ADMIN_PASS="$ADMIN_PASS" \
nohup ./bin/server > server.log 2>&1 &
echo "==> 服务已启动"
echo " 管理员账号: $ADMIN_USER"
echo " 日志文件: server.log"
echo ""
echo "使用方式:"
echo " 默认账密: ./restart.sh"
echo " 自定义: ADMIN_USER=xxx ADMIN_PASS=xxx ./restart.sh"
+37
View File
@@ -0,0 +1,37 @@
#!/usr/bin/env bash
set -euo pipefail
# 管理员配置(通过环境变量设置)
ADMIN_USER="${ADMIN_USER:-admin}"
ADMIN_PASS="${ADMIN_PASS:-admin123}"
# 1. 拉取最新代码
echo "==> 拉取最新代码..."
git pull origin main || true
# 2. 前端打包(如有 web/ 目录)
if [[ -d "web" ]]; then
echo "==> 构建前端..."
cd web
npm install
npm run build
cd ..
fi
# 3. 后端编译
echo "==> 编译后端..."
mvn clean package -DskipTests
# 4. 停止旧进程
echo "==> 停止旧进程..."
pkill -f "java.*jar" || true
sleep 2
# 5. 启动新进程
echo "==> 启动服务..."
ADMIN_USER="$ADMIN_USER" ADMIN_PASS="$ADMIN_PASS" \
nohup java -jar target/*.jar > server.log 2>&1 &
echo "==> 服务已启动"
echo " 管理员账号: $ADMIN_USER"
echo " 日志文件: server.log"
+1 -1
View File
@@ -77,7 +77,7 @@
| `/requirement-interrogate` | 需求极刑审问,挖掘逻辑漏洞 | `/requirement-interrogate 用户要导出数据` |
| `/design-checklist` | 生成设计质量检查清单 | `/design-checklist` |
| `/project-init` | 为新项目初始化 Claude Code 配置 | `/project-init` |
| `/project-scan` | 扫描已有项目生成 CLAUDE.md | `/project-scan` |
| `/project-scan` | 扫描项目生成配置(CLAUDE.md/restart.sh/ignore/Docker) | `/project-scan` |
| `/style-extract` | 从代码或设计图提取样式变量 | `/style-extract` |
| `/status` | 显示当前配置状态(Rules/Skills/LSP) | `/status` |