install.sh
6.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
#!/bin/bash
# API Generator Skill 安装脚本
# 用于将 API Generator 功能安装到当前项目
set -e
echo "🚀 API Generator Skill 安装程序"
echo "================================"
echo ""
# 颜色定义
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color
# 检查是否在项目根目录
if [ ! -f "package.json" ]; then
echo -e "${RED}❌ 错误: 请在项目根目录运行此脚本${NC}"
exit 1
fi
# 检查 package.json 中是否已有 api:generate 命令
if grep -q '"api:generate"' package.json; then
echo -e "${YELLOW}⚠️ 检测到已存在 api:generate 命令${NC}"
read -p "是否覆盖? (y/N) " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo "安装已取消"
exit 0
fi
fi
# 创建目录结构
echo -e "${GREEN}📁 创建目录结构...${NC}"
mkdir -p .claude/custom_skills/api-generator/{scripts,templates,setup}
mkdir -p docs/openAPI
mkdir -p .tmp
# 检查必要的文件
echo -e "${GREEN}📋 检查文件...${NC}"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# 检查脚本文件
if [ ! -f "$SCRIPT_DIR/../scripts/generateApiFromOpenAPI.js" ]; then
echo -e "${RED}❌ 缺少 generateApiFromOpenAPI.js${NC}"
exit 1
fi
if [ ! -f "$SCRIPT_DIR/../scripts/apiDiff.js" ]; then
echo -e "${RED}❌ 缺少 apiDiff.js${NC}"
exit 1
fi
# 检查模板文件
if [ ! -f "$SCRIPT_DIR/../templates/openAPI-template.md" ]; then
echo -e "${RED}❌ 缺少 openAPI-template.md${NC}"
exit 1
fi
# 安装依赖
echo -e "${GREEN}📦 检查依赖...${NC}"
if ! command -v pnpm &> /dev/null; then
echo -e "${YELLOW}⚠️ pnpm 未安装,尝试使用 npm...${NC}"
PKG_MANAGER="npm"
else
PKG_MANAGER="pnpm"
fi
# 检查 js-yaml 是否已安装
if ! $PKG_MANAGER list js-yaml &> /dev/null; then
echo -e "${GREEN}📦 安装 js-yaml...${NC}"
$PKG_MANAGER add -D js-yaml
else
echo -e "${GREEN}✅ js-yaml 已安装${NC}"
fi
# 添加 npm scripts
echo -e "${GREEN}🔧 配置 npm scripts...${NC}"
# 使用 jq 或临时文件添加 scripts
if command -v jq &> /dev/null; then
jq '.scripts."api:generate" = "node .claude/custom_skills/api-generator/scripts/generateApiFromOpenAPI.js" |
.scripts."api:diff" = "node .claude/custom_skills/api-generator/scripts/apiDiff.js"' package.json > package.json.tmp
mv package.json.tmp package.json
else
# 使用 sed 添加(更兼容)
if ! grep -q '"api:generate"' package.json; then
# 找到 "scripts" 行并在后面插入
sed -i '' '/"scripts":/a\
\ "api:generate": "node .claude/custom_skills/api-generator/scripts/generateApiFromOpenAPI.js",\
\ "api:diff": "node .claude/custom_skills/api-generator/scripts/apiDiff.js",
' package.json 2>/dev/null || sed -i '/"scripts":/a\
\ "api:generate": "node .claude/custom_skills/api-generator/scripts/generateApiFromOpenAPI.js",\
\ "api:diff": "node .claude/custom_skills/api-generator/scripts/apiDiff.js",
' package.json
fi
fi
# 创建示例文档
echo -e "${GREEN}📝 创建示例文档...${NC}"
mkdir -p docs/openAPI/example
cat > docs/openAPI/example/getExample.md << 'EOF'
# 获取示例数据
## OpenAPI Specification
```yaml
openapi: 3.0.1
info:
title: ''
version: 1.0.0
paths:
/srv/:
get:
summary: 获取示例数据
description: 这是一个示例接口,展示如何编写 OpenAPI 文档
tags:
- 示例模块
parameters:
- name: a
in: query
description: action 参数
required: false
example: example_data
schema:
type: string
- name: id
in: query
description: 数据ID
required: true
example: 123
schema:
type: integer
responses:
'200':
description: 成功返回
content:
application/json:
schema:
type: object
properties:
code:
type: integer
description: 0=失败,1=成功
msg:
type: string
description: 错误信息
data:
type: object
properties:
id:
type: integer
description: 数据ID
name:
type: string
description: 名称
created_at:
type: string
description: 创建时间
```
EOF
# 创建 README
cat > docs/openAPI/README.md << 'EOF'
# OpenAPI 文档目录
本目录用于存放 OpenAPI 规范的接口文档,这些文档将自动转换为前端 API 调用代码。
## 目录结构
```
docs/openAPI/
├── example/ # 示例模块
│ └── getExample.md # 示例接口
├── user/ # 用户模块(你的模块)
├── course/ # 课程模块(你的模块)
└── order/ # 订单模块(你的模块)
```
## 如何添加新接口
1. **创建模块目录**(如果不存在)
```bash
mkdir -p docs/openAPI/yourModule
```
2. **创建接口文档**
```bash
# 使用模板创建
cp .claude/custom_skills/api-generator/templates/openAPI-template.md \
docs/openAPI/yourModule/yourApiName.md
```
3. **编辑文档**
- 按照模板填写接口信息
- 遵循 OpenAPI 3.0.1 规范
- 添加详细的参数说明和返回值结构
4. **生成代码**
```bash
pnpm api:generate
```
5. **使用生成的 API**
```javascript
import { yourApiNameAPI } from '@/api/yourModule'
```
## 命令速查
```bash
# 生成 API 代码
pnpm api:generate
# 对比 API 变更
pnpm api:diff docs/openAPI/user/ docs/openAPI/user-new/
# 查看帮助
cat .claude/custom_skills/api-generator/skill.md
```
## 注意事项
- 第一级目录名 = 模块名(会生成 `模块名.js`)
- 第二级文件名 = 接口名(会生成 `接口名API` 函数)
- 所有 `.md` 文件必须包含 YAML 代码块
- 遵循 OpenAPI 3.0.1 规范编写 YAML
## 参考文档
详细使用说明请参考:[API Generator Skill 文档](../../.claude/custom_skills/api-generator/skill.md)
EOF
# 完成
echo ""
echo -e "${GREEN}✅ 安装完成!${NC}"
echo ""
echo "📚 下一步:"
echo " 1. 查看示例文档: cat docs/openAPI/example/getExample.md"
echo " 2. 创建你的第一个接口: cp docs/openAPI/example/getExample.md docs/openAPI/yourModule/yourApi.md"
echo " 3. 生成 API 代码: pnpm api:generate"
echo ""
echo "📖 完整文档: cat .claude/custom_skills/api-generator/skill.md"
echo ""