@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.
@@ -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
+ ```
@@ -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