@gogenger/go-gen 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +38 -0
- package/LICENSE +21 -0
- package/README.en.md +151 -0
- package/README.md +151 -0
- package/bin/index.js +86 -0
- package/core/config.js +176 -0
- package/core/fetch-mode.js +400 -0
- package/core/openapi-mode.js +328 -0
- package/core/quicktype.js +31 -0
- package/core/writer.js +413 -0
- package/docs/BEST_PRACTICES.md +327 -0
- package/docs/CONFIGURATION.md +161 -0
- package/docs/FEATURES.md +136 -0
- package/docs/TROUBLESHOOTING.md +386 -0
- package/docs/USE_CASES.md +247 -0
- package/package.json +68 -0
- package/utils/load-openapi.js +23 -0
- package/utils/name.js +17 -0
- package/utils/sampler.js +28 -0
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
# ⚙️ 配置系统详解
|
|
2
|
+
|
|
3
|
+
## 双层配置设计
|
|
4
|
+
|
|
5
|
+
因为 CLI 工具安装在全局,但会在不同项目中使用:
|
|
6
|
+
|
|
7
|
+
- **全局配置** (`~/.apirc.json`) - 你的个人习惯
|
|
8
|
+
- **项目配置** (`./.apirc.json`) - 项目团队规范
|
|
9
|
+
|
|
10
|
+
**配置优先级:** 项目配置 > 全局配置 > 默认配置
|
|
11
|
+
|
|
12
|
+
## 初始化配置
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
# 初始化项目配置
|
|
16
|
+
go-gen init
|
|
17
|
+
|
|
18
|
+
# 设置全局配置
|
|
19
|
+
go-gen config --global
|
|
20
|
+
|
|
21
|
+
# 查看当前配置
|
|
22
|
+
go-gen config --show
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## 配置示例
|
|
26
|
+
|
|
27
|
+
### 全局配置 (`~/.apirc.json`) - 个人偏好
|
|
28
|
+
|
|
29
|
+
```json
|
|
30
|
+
{
|
|
31
|
+
"defaultOutputPath": "current",
|
|
32
|
+
"timeout": 15000,
|
|
33
|
+
"autoRetry": true,
|
|
34
|
+
"maxRetries": 5
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### 项目配置 (`.apirc.json`) - 团队规范
|
|
39
|
+
|
|
40
|
+
```json
|
|
41
|
+
{
|
|
42
|
+
"requestModule": "@/utils/request",
|
|
43
|
+
"typePrefix": "I",
|
|
44
|
+
"apiPrefix": "api"
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## 配置项说明
|
|
49
|
+
|
|
50
|
+
| 配置项 | 类型 | 默认值 | 说明 |
|
|
51
|
+
| ------------------- | ------- | ------------------- | -------------------- |
|
|
52
|
+
| `defaultOutputPath` | string | `'current'` | 默认输出路径 |
|
|
53
|
+
| `timeout` | number | `10000` | 请求超时时间(毫秒) |
|
|
54
|
+
| `autoRetry` | boolean | `true` | 失败是否自动重试 |
|
|
55
|
+
| `maxRetries` | number | `3` | 最大重试次数 |
|
|
56
|
+
| `requestModule` | string | `'@/utils/request'` | request 模块路径 |
|
|
57
|
+
| `typePrefix` | string | `''` | 类型名前缀 |
|
|
58
|
+
| `apiPrefix` | string | `''` | API 方法名前缀 |
|
|
59
|
+
| `defaultMethod` | string | `'GET'` | 默认 HTTP 方法 |
|
|
60
|
+
|
|
61
|
+
## 配置使用场景
|
|
62
|
+
|
|
63
|
+
### 场景 1:个人习惯配置(全局)
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
go-gen config --global
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
设置你常用的配置:
|
|
70
|
+
|
|
71
|
+
```json
|
|
72
|
+
{
|
|
73
|
+
"timeout": 20000,
|
|
74
|
+
"maxRetries": 5,
|
|
75
|
+
"defaultOutputPath": "desktop"
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### 场景 2:团队项目规范(项目)
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
cd your-project
|
|
83
|
+
go-gen init
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
编辑 `.apirc.json`:
|
|
87
|
+
|
|
88
|
+
```json
|
|
89
|
+
{
|
|
90
|
+
"requestModule": "@/api/request",
|
|
91
|
+
"typePrefix": "I",
|
|
92
|
+
"apiPrefix": "api"
|
|
93
|
+
}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
提交到 Git:
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
git add .apirc.json
|
|
100
|
+
git commit -m "chore: add api generator config"
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### 场景 3:多项目维护
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
# 项目 A(使用 axios)
|
|
107
|
+
cd project-a
|
|
108
|
+
cat .apirc.json
|
|
109
|
+
# { "requestModule": "axios" }
|
|
110
|
+
go-gen fetch
|
|
111
|
+
|
|
112
|
+
# 项目 B(使用自定义 request)
|
|
113
|
+
cd project-b
|
|
114
|
+
cat .apirc.json
|
|
115
|
+
# { "requestModule": "@/utils/http" }
|
|
116
|
+
go-gen fetch
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
每个项目自动使用各自的配置,无需手动切换。
|
|
120
|
+
|
|
121
|
+
## 配置优先级示例
|
|
122
|
+
|
|
123
|
+
假设有以下配置:
|
|
124
|
+
|
|
125
|
+
**默认配置:**
|
|
126
|
+
|
|
127
|
+
```json
|
|
128
|
+
{
|
|
129
|
+
"timeout": 10000,
|
|
130
|
+
"maxRetries": 3,
|
|
131
|
+
"requestModule": "@/utils/request"
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
**全局配置 (`~/.apirc.json`):**
|
|
136
|
+
|
|
137
|
+
```json
|
|
138
|
+
{
|
|
139
|
+
"timeout": 15000,
|
|
140
|
+
"maxRetries": 5
|
|
141
|
+
}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
**项目配置 (`.apirc.json`):**
|
|
145
|
+
|
|
146
|
+
```json
|
|
147
|
+
{
|
|
148
|
+
"maxRetries": 2,
|
|
149
|
+
"requestModule": "axios"
|
|
150
|
+
}
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
**最终生效的配置:**
|
|
154
|
+
|
|
155
|
+
```json
|
|
156
|
+
{
|
|
157
|
+
"timeout": 15000, // 来自全局配置
|
|
158
|
+
"maxRetries": 2, // 来自项目配置(优先级最高)
|
|
159
|
+
"requestModule": "axios" // 来自项目配置
|
|
160
|
+
}
|
|
161
|
+
```
|
package/docs/FEATURES.md
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# 📖 完整特性文档
|
|
2
|
+
|
|
3
|
+
## 1. 支持多种 HTTP 方法
|
|
4
|
+
|
|
5
|
+
自动识别 POST、PUT、PATCH 方法需要请求体,并生成对应的 Request 类型:
|
|
6
|
+
|
|
7
|
+
```typescript
|
|
8
|
+
// GET 请求
|
|
9
|
+
export function getUser() {
|
|
10
|
+
return request.get<UserResponse>('/api/user');
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
// POST 请求(带请求体)
|
|
14
|
+
export function createUser(data: CreateUserRequest) {
|
|
15
|
+
return request.post<UserResponse>('/api/user', data);
|
|
16
|
+
}
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## 2. 请求体类型生成
|
|
20
|
+
|
|
21
|
+
当选择需要请求体时,可以输入示例 JSON 数据:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
📦 该接口是否需要请求体? Yes
|
|
25
|
+
|
|
26
|
+
💡 提示: 请输入请求体的 JSON 示例数据
|
|
27
|
+
📝 请输入请求体 JSON: {"name": "John", "email": "john@example.com"}
|
|
28
|
+
|
|
29
|
+
✅ Request 类型生成完成
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
生成的类型:
|
|
33
|
+
|
|
34
|
+
```typescript
|
|
35
|
+
export interface CreateUserRequest {
|
|
36
|
+
name: string;
|
|
37
|
+
email: string;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export interface CreateUserResponse {
|
|
41
|
+
id: number;
|
|
42
|
+
message: string;
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## 3. 增量写入
|
|
47
|
+
|
|
48
|
+
智能检测已存在的文件,自动合并新内容:
|
|
49
|
+
|
|
50
|
+
```typescript
|
|
51
|
+
// 第一次生成
|
|
52
|
+
export function getUsers() { ... }
|
|
53
|
+
|
|
54
|
+
// 第二次生成到同一目录
|
|
55
|
+
export function getUsers() { ... }
|
|
56
|
+
export function createUser(data: CreateUserRequest) { ... } // 新增
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## 4. 类型冲突自动处理
|
|
60
|
+
|
|
61
|
+
检测到重复类型名时自动重命名:
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
⚠️ 类型名冲突,已自动重命名: ApiResponse → ApiResponse1
|
|
65
|
+
✨ 生成成功!(类型已重命名为 ApiResponse1)
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## 5. 认证支持
|
|
69
|
+
|
|
70
|
+
### Bearer Token
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
🔐 是否需要认证? Bearer Token
|
|
74
|
+
🔑 请输入 Bearer Token: ********
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
自动添加请求头:`Authorization: Bearer xxx`
|
|
78
|
+
|
|
79
|
+
### Cookie
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
🔐 是否需要认证? Cookie
|
|
83
|
+
🍪 请输入 Cookie: sessionid=abc123
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
自动添加请求头:`Cookie: sessionid=abc123`
|
|
87
|
+
|
|
88
|
+
## 6. 自动重试机制
|
|
89
|
+
|
|
90
|
+
网络请求失败时自动重试:
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
🚀 请求 API 数据中...
|
|
94
|
+
⚠️ 请求失败 (尝试 1/3),2秒后重试...
|
|
95
|
+
⚠️ 请求失败 (尝试 2/3),2秒后重试...
|
|
96
|
+
✅ API 数据获取完成
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## 7. 批量生成优化
|
|
100
|
+
|
|
101
|
+
OpenAPI 批量模式特点:
|
|
102
|
+
|
|
103
|
+
- ✅ 只询问一次输出目录
|
|
104
|
+
- ✅ 显示进度 (1/10, 2/10...)
|
|
105
|
+
- ✅ 统计成功和失败数量
|
|
106
|
+
- ✅ 自动命名(基于 operationId)
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
⚡ 批量生成中... (1/10): GET /users
|
|
110
|
+
⚡ 批量生成中... (2/10): POST /users
|
|
111
|
+
...
|
|
112
|
+
✅ 批量生成完成!成功: 10,失败: 0
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## 8. 自定义输出路径
|
|
116
|
+
|
|
117
|
+
支持三种输出方式:
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
# 输出到桌面
|
|
121
|
+
# 选择 "💻 桌面"
|
|
122
|
+
|
|
123
|
+
# 输出到当前目录
|
|
124
|
+
# 选择 "📁 当前目录"
|
|
125
|
+
|
|
126
|
+
# 自定义路径
|
|
127
|
+
# 选择 "🔍 自定义路径"
|
|
128
|
+
# 输入: /path/to/output
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
## 9. 友好的错误提示
|
|
132
|
+
|
|
133
|
+
```
|
|
134
|
+
❌ 请求失败: HTTP 401: Unauthorized
|
|
135
|
+
💡 提示: 请检查 Token 是否正确
|
|
136
|
+
```
|
|
@@ -0,0 +1,386 @@
|
|
|
1
|
+
# 🚨 故障排查
|
|
2
|
+
|
|
3
|
+
## 问题 1:请求超时
|
|
4
|
+
|
|
5
|
+
### 症状
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
❌ 请求失败: Request timeout after 10000ms
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
### 原因
|
|
12
|
+
|
|
13
|
+
- API 响应慢
|
|
14
|
+
- 网络不稳定
|
|
15
|
+
- 服务器负载高
|
|
16
|
+
|
|
17
|
+
### 解决方案
|
|
18
|
+
|
|
19
|
+
**方案 1:增加超时时间(全局配置)**
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
go-gen config --global
|
|
23
|
+
# 设置 timeout: 30000
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
**方案 2:增加超时时间(项目配置)**
|
|
27
|
+
|
|
28
|
+
编辑 `.apirc.json`:
|
|
29
|
+
|
|
30
|
+
```json
|
|
31
|
+
{
|
|
32
|
+
"timeout": 30000
|
|
33
|
+
}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
**方案 3:增加重试次数**
|
|
37
|
+
|
|
38
|
+
```json
|
|
39
|
+
{
|
|
40
|
+
"timeout": 20000,
|
|
41
|
+
"autoRetry": true,
|
|
42
|
+
"maxRetries": 5
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## 问题 2:在不同项目生成的代码不一致
|
|
47
|
+
|
|
48
|
+
### 症状
|
|
49
|
+
|
|
50
|
+
- 项目 A 生成的是 `axios`
|
|
51
|
+
- 项目 B 生成的是 `@/utils/request`
|
|
52
|
+
- 团队成员代码风格不统一
|
|
53
|
+
|
|
54
|
+
### 原因
|
|
55
|
+
|
|
56
|
+
没有使用项目配置
|
|
57
|
+
|
|
58
|
+
### 解决方案
|
|
59
|
+
|
|
60
|
+
**使用项目配置:**
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
cd your-project
|
|
64
|
+
go-gen init
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
编辑 `.apirc.json`:
|
|
68
|
+
|
|
69
|
+
```json
|
|
70
|
+
{
|
|
71
|
+
"requestModule": "@/utils/request",
|
|
72
|
+
"typePrefix": "I",
|
|
73
|
+
"apiPrefix": "api"
|
|
74
|
+
}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
**提交到 Git:**
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
git add .apirc.json
|
|
81
|
+
git commit -m "chore: add api generator config"
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
团队成员 `git pull` 后会自动使用相同配置。
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## 问题 3:认证失败
|
|
89
|
+
|
|
90
|
+
### 症状
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
❌ 请求失败: HTTP 401: Unauthorized
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### 原因
|
|
97
|
+
|
|
98
|
+
- Token 过期
|
|
99
|
+
- Token 格式错误
|
|
100
|
+
- 权限不足
|
|
101
|
+
|
|
102
|
+
### 解决方案
|
|
103
|
+
|
|
104
|
+
**检查 Token:**
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
# 重新输入正确的 Token
|
|
108
|
+
go-gen fetch
|
|
109
|
+
🔐 是否需要认证? Bearer Token
|
|
110
|
+
🔑 请输入 Bearer Token: <新的token>
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
**检查 Token 格式:**
|
|
114
|
+
|
|
115
|
+
- Bearer Token: `Bearer xxxxx` 或 `xxxxx`
|
|
116
|
+
- Cookie: `key=value; key2=value2`
|
|
117
|
+
|
|
118
|
+
**测试 Token:**
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
# 使用 curl 测试
|
|
122
|
+
curl -H "Authorization: Bearer YOUR_TOKEN" https://api.example.com/users
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## 问题 4:OpenAPI 文档解析失败
|
|
128
|
+
|
|
129
|
+
### 症状
|
|
130
|
+
|
|
131
|
+
```
|
|
132
|
+
❌ OpenAPI 解析失败: Invalid schema format
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### 原因
|
|
136
|
+
|
|
137
|
+
- OpenAPI 文档格式不正确
|
|
138
|
+
- 版本不支持(仅支持 2.0 和 3.0)
|
|
139
|
+
- URL 访问失败
|
|
140
|
+
|
|
141
|
+
### 解决方案
|
|
142
|
+
|
|
143
|
+
**方案 1:检查文档格式**
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
# 使用在线验证器
|
|
147
|
+
https://editor.swagger.io/
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
**方案 2:本地文件**
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
# 下载文档到本地
|
|
154
|
+
curl -o swagger.json https://api.example.com/swagger.json
|
|
155
|
+
|
|
156
|
+
# 使用本地文件
|
|
157
|
+
go-gen openapi ./swagger.json
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
**方案 3:检查版本**
|
|
161
|
+
|
|
162
|
+
支持的版本:
|
|
163
|
+
|
|
164
|
+
- OpenAPI 3.0.x ✅
|
|
165
|
+
- OpenAPI 2.0 (Swagger) ✅
|
|
166
|
+
- OpenAPI 3.1.x ❌(暂不支持)
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
## 问题 5:生成的代码有语法错误
|
|
171
|
+
|
|
172
|
+
### 症状
|
|
173
|
+
|
|
174
|
+
```typescript
|
|
175
|
+
// 生成的代码
|
|
176
|
+
export interface UserResponse {
|
|
177
|
+
id: number;
|
|
178
|
+
name: ; // 语法错误
|
|
179
|
+
}
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### 原因
|
|
183
|
+
|
|
184
|
+
- API 响应数据不规范
|
|
185
|
+
- JSON 格式错误
|
|
186
|
+
- 空值处理问题
|
|
187
|
+
|
|
188
|
+
### 解决方案
|
|
189
|
+
|
|
190
|
+
**检查 API 响应:**
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
# 使用 curl 检查响应
|
|
194
|
+
curl https://api.example.com/users
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
**检查 JSON 格式:**
|
|
198
|
+
|
|
199
|
+
```json
|
|
200
|
+
// ✅ 正确
|
|
201
|
+
{
|
|
202
|
+
"name": "John",
|
|
203
|
+
"age": 30
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
// ❌ 错误
|
|
207
|
+
{
|
|
208
|
+
"name": "John",
|
|
209
|
+
"age": , // 缺少值
|
|
210
|
+
}
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
**手动修复:**
|
|
214
|
+
|
|
215
|
+
生成后手动检查和修复类型定义。
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## 问题 6:类型名冲突
|
|
220
|
+
|
|
221
|
+
### 症状
|
|
222
|
+
|
|
223
|
+
```
|
|
224
|
+
⚠️ 类型名冲突,已自动重命名: UserResponse → UserResponse1
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
### 原因
|
|
228
|
+
|
|
229
|
+
- 同一目录已存在相同类型名
|
|
230
|
+
- 多次生成相同接口
|
|
231
|
+
|
|
232
|
+
### 解决方案
|
|
233
|
+
|
|
234
|
+
**方案 1:接受自动重命名**
|
|
235
|
+
|
|
236
|
+
自动重命名为 `UserResponse1`, `UserResponse2` 等。
|
|
237
|
+
|
|
238
|
+
**方案 2:手动合并**
|
|
239
|
+
|
|
240
|
+
```typescript
|
|
241
|
+
// 检查是否是重复定义
|
|
242
|
+
// 如果是,删除其中一个
|
|
243
|
+
export interface UserResponse { ... }
|
|
244
|
+
export interface UserResponse1 { ... } // 删除
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
**方案 3:使用不同的输出目录**
|
|
248
|
+
|
|
249
|
+
```bash
|
|
250
|
+
go-gen fetch
|
|
251
|
+
📂 输出目录: 🔍 自定义路径
|
|
252
|
+
# 输入不同的路径
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
---
|
|
256
|
+
|
|
257
|
+
## 问题 7:找不到 request 模块
|
|
258
|
+
|
|
259
|
+
### 症状
|
|
260
|
+
|
|
261
|
+
```typescript
|
|
262
|
+
// 生成的代码
|
|
263
|
+
import request from '@/utils/request'; // 找不到模块
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
### 原因
|
|
267
|
+
|
|
268
|
+
项目中没有对应的 request 模块
|
|
269
|
+
|
|
270
|
+
### 解决方案
|
|
271
|
+
|
|
272
|
+
**方案 1:创建 request 模块**
|
|
273
|
+
|
|
274
|
+
```typescript
|
|
275
|
+
// src/utils/request.ts
|
|
276
|
+
import axios from 'axios';
|
|
277
|
+
|
|
278
|
+
const request = axios.create({
|
|
279
|
+
baseURL: '/api',
|
|
280
|
+
timeout: 10000,
|
|
281
|
+
});
|
|
282
|
+
|
|
283
|
+
export default request;
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
**方案 2:修改配置**
|
|
287
|
+
|
|
288
|
+
```json
|
|
289
|
+
{
|
|
290
|
+
"requestModule": "axios" // 直接使用 axios
|
|
291
|
+
}
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
**方案 3:手动修改导入**
|
|
295
|
+
|
|
296
|
+
生成后手动修改 import 路径。
|
|
297
|
+
|
|
298
|
+
---
|
|
299
|
+
|
|
300
|
+
## 问题 8:批量生成失败
|
|
301
|
+
|
|
302
|
+
### 症状
|
|
303
|
+
|
|
304
|
+
```
|
|
305
|
+
⚡ 批量生成中... (1/50): GET /users
|
|
306
|
+
❌ 生成失败: 5 个接口
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
### 原因
|
|
310
|
+
|
|
311
|
+
- 部分接口定义不完整
|
|
312
|
+
- operationId 缺失
|
|
313
|
+
- 响应格式不标准
|
|
314
|
+
|
|
315
|
+
### 解决方案
|
|
316
|
+
|
|
317
|
+
**查看详细错误:**
|
|
318
|
+
|
|
319
|
+
检查控制台输出,找到失败的接口。
|
|
320
|
+
|
|
321
|
+
**逐个生成:**
|
|
322
|
+
|
|
323
|
+
```bash
|
|
324
|
+
go-gen openapi ./swagger.json
|
|
325
|
+
# 选择 "逐个生成"
|
|
326
|
+
# 跳过有问题的接口
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
**修复 OpenAPI 文档:**
|
|
330
|
+
|
|
331
|
+
确保每个接口都有:
|
|
332
|
+
|
|
333
|
+
- operationId
|
|
334
|
+
- responses
|
|
335
|
+
- 正确的 schema 定义
|
|
336
|
+
|
|
337
|
+
---
|
|
338
|
+
|
|
339
|
+
## 问题 9:配置不生效
|
|
340
|
+
|
|
341
|
+
### 症状
|
|
342
|
+
|
|
343
|
+
设置了配置,但生成的代码没有使用配置。
|
|
344
|
+
|
|
345
|
+
### 原因
|
|
346
|
+
|
|
347
|
+
配置文件路径错误或格式错误
|
|
348
|
+
|
|
349
|
+
### 解决方案
|
|
350
|
+
|
|
351
|
+
**检查配置文件位置:**
|
|
352
|
+
|
|
353
|
+
```bash
|
|
354
|
+
# 项目配置
|
|
355
|
+
ls .apirc.json
|
|
356
|
+
|
|
357
|
+
# 全局配置
|
|
358
|
+
ls ~/.apirc.json
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
**检查 JSON 格式:**
|
|
362
|
+
|
|
363
|
+
```bash
|
|
364
|
+
# 验证 JSON 格式
|
|
365
|
+
cat .apirc.json | jq .
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
**查看当前配置:**
|
|
369
|
+
|
|
370
|
+
```bash
|
|
371
|
+
go-gen config --show
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
**重新初始化:**
|
|
375
|
+
|
|
376
|
+
```bash
|
|
377
|
+
go-gen init --force # 强制重新创建
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
---
|
|
381
|
+
|
|
382
|
+
## 获取帮助
|
|
383
|
+
|
|
384
|
+
如果以上方案都无法解决问题:
|
|
385
|
+
|
|
386
|
+
发邮件到:bg2582266166@gmail.com
|