扩展 /project-scan 支持生成常用文件 .claudeignore .gitignore .dockerignore Dockerfile docker-compose.yml
This commit is contained in:
1 parent
4838b9e549
commit
82af4a075a
12 files changed
+507
-76
No files matched your search
@@ -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"]
|
||||
@@ -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"]
|
||||
@@ -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
|
||||
@@ -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/
|
||||
@@ -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
|
||||
@@ -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"
|
||||
@@ -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"
|
||||
@@ -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` |
|
||||
|
||||
|
||||
Reference in new issue
Block a user