apifox-mock-generator 1.1.0 → 1.2.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.
Files changed (120) hide show
  1. package/CHANGELOG.md +53 -3
  2. package/README.md +124 -55
  3. package/dist/package.json +1 -1
  4. package/dist/src/core/apifox-client.d.ts.map +1 -1
  5. package/dist/src/core/apifox-client.js +12 -12
  6. package/dist/src/core/apifox-client.js.map +1 -1
  7. package/dist/src/core/endpoint-filter.d.ts.map +1 -1
  8. package/dist/src/core/endpoint-filter.js +35 -5
  9. package/dist/src/core/endpoint-filter.js.map +1 -1
  10. package/dist/src/core/openapi-converter.d.ts.map +1 -1
  11. package/dist/src/core/openapi-converter.js +3 -2
  12. package/dist/src/core/openapi-converter.js.map +1 -1
  13. package/dist/src/generators/mock-generator.d.ts +2 -2
  14. package/dist/src/generators/mock-generator.d.ts.map +1 -1
  15. package/dist/src/generators/mock-generator.js +37 -9
  16. package/dist/src/generators/mock-generator.js.map +1 -1
  17. package/dist/src/generators/templates/file-architecture.d.ts +10 -0
  18. package/dist/src/generators/templates/file-architecture.d.ts.map +1 -0
  19. package/dist/src/generators/templates/file-architecture.js +18 -0
  20. package/dist/src/generators/templates/file-architecture.js.map +1 -0
  21. package/dist/src/generators/templates/mock-template.d.ts +2 -2
  22. package/dist/src/generators/templates/mock-template.d.ts.map +1 -1
  23. package/dist/src/generators/templates/mock-template.js +102 -70
  24. package/dist/src/generators/templates/mock-template.js.map +1 -1
  25. package/dist/src/generators/templates/type-template.d.ts +2 -18
  26. package/dist/src/generators/templates/type-template.d.ts.map +1 -1
  27. package/dist/src/generators/templates/type-template.js +222 -264
  28. package/dist/src/generators/templates/type-template.js.map +1 -1
  29. package/dist/src/generators/type-generator.d.ts.map +1 -1
  30. package/dist/src/generators/type-generator.js +2 -2
  31. package/dist/src/generators/type-generator.js.map +1 -1
  32. package/dist/src/types/index.d.ts +3 -1
  33. package/dist/src/types/index.d.ts.map +1 -1
  34. package/dist/src/types/mock/list.d.ts +12 -0
  35. package/dist/src/types/mock/list.d.ts.map +1 -0
  36. package/dist/src/types/mock/list.js +4 -0
  37. package/dist/src/types/mock/list.js.map +1 -0
  38. package/dist/src/types/mock/test.d.ts +12 -0
  39. package/dist/src/types/mock/test.d.ts.map +1 -0
  40. package/dist/src/types/mock/test.js +4 -0
  41. package/dist/src/types/mock/test.js.map +1 -0
  42. package/dist/src/types/mock/v1/auth/captcha.d.ts +18 -0
  43. package/dist/src/types/mock/v1/auth/captcha.d.ts.map +1 -0
  44. package/dist/src/types/mock/v1/auth/captcha.js +4 -0
  45. package/dist/src/types/mock/v1/auth/captcha.js.map +1 -0
  46. package/dist/src/types/mock/v1/auth/login/tenant.d.ts +26 -0
  47. package/dist/src/types/mock/v1/auth/login/tenant.d.ts.map +1 -0
  48. package/dist/src/types/mock/v1/auth/login/tenant.js +4 -0
  49. package/dist/src/types/mock/v1/auth/login/tenant.js.map +1 -0
  50. package/dist/src/types/mock/v1/auth/login/username.d.ts +40 -0
  51. package/dist/src/types/mock/v1/auth/login/username.d.ts.map +1 -0
  52. package/dist/src/types/mock/v1/auth/login/username.js +4 -0
  53. package/dist/src/types/mock/v1/auth/login/username.js.map +1 -0
  54. package/dist/src/types/mock/v1/auth/logout.d.ts +12 -0
  55. package/dist/src/types/mock/v1/auth/logout.d.ts.map +1 -0
  56. package/dist/src/types/mock/v1/auth/logout.js +4 -0
  57. package/dist/src/types/mock/v1/auth/logout.js.map +1 -0
  58. package/dist/src/types/mock/v1/role/list.d.ts +36 -0
  59. package/dist/src/types/mock/v1/role/list.d.ts.map +1 -0
  60. package/dist/src/types/mock/v1/role/list.js +4 -0
  61. package/dist/src/types/mock/v1/role/list.js.map +1 -0
  62. package/dist/src/types/mock/v1/role/permissions.d.ts +24 -0
  63. package/dist/src/types/mock/v1/role/permissions.d.ts.map +1 -0
  64. package/dist/src/types/mock/v1/role/permissions.js +4 -0
  65. package/dist/src/types/mock/v1/role/permissions.js.map +1 -0
  66. package/dist/src/types/mock/v1/role.d.ts +91 -0
  67. package/dist/src/types/mock/v1/role.d.ts.map +1 -0
  68. package/dist/src/types/mock/v1/role.js +4 -0
  69. package/dist/src/types/mock/v1/role.js.map +1 -0
  70. package/dist/src/types/mock/v1/tenant/permissions.d.ts +33 -0
  71. package/dist/src/types/mock/v1/tenant/permissions.d.ts.map +1 -0
  72. package/dist/src/types/mock/v1/tenant/permissions.js +4 -0
  73. package/dist/src/types/mock/v1/tenant/permissions.js.map +1 -0
  74. package/dist/src/types/mock/v1/tenant/user/disabled.d.ts +24 -0
  75. package/dist/src/types/mock/v1/tenant/user/disabled.d.ts.map +1 -0
  76. package/dist/src/types/mock/v1/tenant/user/disabled.js +4 -0
  77. package/dist/src/types/mock/v1/tenant/user/disabled.js.map +1 -0
  78. package/dist/src/types/mock/v1/tenant/user/list.d.ts +46 -0
  79. package/dist/src/types/mock/v1/tenant/user/list.d.ts.map +1 -0
  80. package/dist/src/types/mock/v1/tenant/user/list.js +4 -0
  81. package/dist/src/types/mock/v1/tenant/user/list.js.map +1 -0
  82. package/dist/src/types/mock/v1/tenant/user/role.d.ts +24 -0
  83. package/dist/src/types/mock/v1/tenant/user/role.d.ts.map +1 -0
  84. package/dist/src/types/mock/v1/tenant/user/role.js +4 -0
  85. package/dist/src/types/mock/v1/tenant/user/role.js.map +1 -0
  86. package/dist/src/types/mock/v1/tenant/user/unlink.d.ts +12 -0
  87. package/dist/src/types/mock/v1/tenant/user/unlink.d.ts.map +1 -0
  88. package/dist/src/types/mock/v1/tenant/user/unlink.js +4 -0
  89. package/dist/src/types/mock/v1/tenant/user/unlink.js.map +1 -0
  90. package/dist/src/types/mock/v1/tenant/user.d.ts +36 -0
  91. package/dist/src/types/mock/v1/tenant/user.d.ts.map +1 -0
  92. package/dist/src/types/mock/v1/tenant/user.js +4 -0
  93. package/dist/src/types/mock/v1/tenant/user.js.map +1 -0
  94. package/dist/src/types/mock/v1/user/avatar.d.ts +22 -0
  95. package/dist/src/types/mock/v1/user/avatar.d.ts.map +1 -0
  96. package/dist/src/types/mock/v1/user/avatar.js +4 -0
  97. package/dist/src/types/mock/v1/user/avatar.js.map +1 -0
  98. package/dist/src/types/mock/v1/user/info.d.ts +36 -0
  99. package/dist/src/types/mock/v1/user/info.d.ts.map +1 -0
  100. package/dist/src/types/mock/v1/user/info.js +4 -0
  101. package/dist/src/types/mock/v1/user/info.js.map +1 -0
  102. package/dist/src/types/mock/v1/user/password.d.ts +24 -0
  103. package/dist/src/types/mock/v1/user/password.d.ts.map +1 -0
  104. package/dist/src/types/mock/v1/user/password.js +4 -0
  105. package/dist/src/types/mock/v1/user/password.js.map +1 -0
  106. package/dist/src/types/mock/v1/user/permissions.d.ts +33 -0
  107. package/dist/src/types/mock/v1/user/permissions.d.ts.map +1 -0
  108. package/dist/src/types/mock/v1/user/permissions.js +4 -0
  109. package/dist/src/types/mock/v1/user/permissions.js.map +1 -0
  110. package/dist/src/types/mock/v1/user/self.d.ts +22 -0
  111. package/dist/src/types/mock/v1/user/self.d.ts.map +1 -0
  112. package/dist/src/types/mock/v1/user/self.js +4 -0
  113. package/dist/src/types/mock/v1/user/self.js.map +1 -0
  114. package/dist/src/types/mock/v1/user.d.ts +34 -0
  115. package/dist/src/types/mock/v1/user.d.ts.map +1 -0
  116. package/dist/src/types/mock/v1/user.js +4 -0
  117. package/dist/src/types/mock/v1/user.js.map +1 -0
  118. package/dist/src/utils/code-formatter.js +1 -1
  119. package/dist/src/utils/code-formatter.js.map +1 -1
  120. package/package.json +60 -60
package/CHANGELOG.md CHANGED
@@ -5,6 +5,56 @@
5
5
  格式基于 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.0.0/),
6
6
  版本号遵循 [语义化版本](https://semver.org/lang/zh-CN/)。
7
7
 
8
+ ## [1.1.1] - 2025-01-27
9
+
10
+ ### 🎯 核心功能改进
11
+
12
+ #### 🏗️ Mock 文件架构优化
13
+
14
+ - **新增文件架构管理** - 引入 `file-architecture.ts` 模块,统一管理 Mock 文件的基础结构
15
+ - **两步生成模式** - Mock 文件生成改为两步模式:先确保文件架构,后生成接口内容
16
+ - **智能架构检测** - 自动检测现有文件是否包含必要的 import 语句,避免重复添加
17
+ - **增量架构更新** - 对于已存在的文件,智能添加缺失的基础架构而不覆盖现有内容
18
+
19
+ #### 🔧 代码质量提升
20
+
21
+ - **代码格式化优化** - 改进 `code-formatter.ts`,使用 Prettier 自动格式化生成的代码
22
+ - **统一代码风格** - 所有生成的 Mock 文件都遵循统一的代码风格和格式
23
+ - **更好的可读性** - 生成的代码更加整洁,便于维护和调试
24
+
25
+ #### 📊 类型系统增强
26
+
27
+ - **接口状态支持** - 在 `ApiEndpoint` 类型中新增 `status` 字段,支持接口状态管理
28
+ - **更精确的类型定义** - 优化类型注释,提供更清晰的 API 文档
29
+ - **废弃配置优化** - 改进 `excludedByTags` 的注释说明,明确其用于排除接口状态
30
+
31
+ ### 🚀 技术改进
32
+
33
+ #### 📁 文件管理优化
34
+
35
+ - **目录结构自动创建** - 生成 Mock 文件时自动创建必要的目录结构
36
+ - **文件存在性检查** - 增强文件存在性检查,避免文件操作错误
37
+ - **架构完整性保证** - 确保每个 Mock 文件都包含必要的 import 语句和基础设置
38
+
39
+ #### 🎨 代码生成改进
40
+
41
+ - **模块化架构** - 将文件架构管理独立为单独模块,提高代码复用性
42
+ - **更好的错误处理** - 改进文件操作过程中的错误处理和日志输出
43
+ - **增量更新支持** - 支持在现有文件中增量添加新的接口定义
44
+
45
+ ### 📖 文档更新
46
+
47
+ ### 📋 执行前提条件
48
+
49
+ 执行 `node dist/src/scripts/serve-mock.js` 需要满足以下条件:
50
+
51
+ 3. **配置文件存在** - 确保 `apifox.config.json` 在项目根目录
52
+ 4. **Mock 文件已生成** - 先运行 `npm run generate` 生成 Mock 文件
53
+ 5. **Mock 目录存在** - 确保 `mock/` 目录存在且包含有效的 Mock 文件
54
+ 6. **端口可用** - 确保配置的 `mockPort` 端口未被占用
55
+
56
+ ---
57
+
8
58
  ## [1.1.0] - 2025-10-13
9
59
 
10
60
  ### 🎯 核心功能
@@ -25,6 +75,7 @@
25
75
  - **自动应用** - 启用 `includeApifoxExtensionProperties` 后自动拉取和应用规则
26
76
 
27
77
  支持的 Apifox 模板转换:
78
+
28
79
  - `{{$string.uuid}}` → `@guid`
29
80
  - `{{$person.fullName(locale='zh_CN')}}` → `@cname`
30
81
  - `{{$internet.email}}` → `@email`
@@ -71,8 +122,8 @@ Mock 规则: @email
71
122
 
72
123
  ```javascript
73
124
  Mock.mock({
74
- email: '@email' // 直接使用 Apifox 配置的规则
75
- })
125
+ email: '@email' // 直接使用 Apifox 配置的规则
126
+ });
76
127
  ```
77
128
 
78
129
  ### ⚡ 兼容性
@@ -206,4 +257,3 @@ Mock.mock({
206
257
  ## 许可证
207
258
 
208
259
  MIT License - 详见 [LICENSE](./LICENSE) 文件
209
-
package/README.md CHANGED
@@ -16,12 +16,14 @@
16
16
  ## ✨ 功能特性
17
17
 
18
18
  ### 核心功能
19
+
19
20
  - 🚀 **Apifox 集成** - 自动从 Apifox 项目拉取 API 接口定义(支持 OpenAPI 3.0)
20
21
  - 📝 **类型生成** - 生成 TypeScript 类型文件(.ts 格式),支持复杂类型、嵌套对象、枚举等
21
22
  - 🎭 **Apifox Mock** - **✨ 直接使用 Apifox 的 mock 规则**,无需本地配置,完全继承 Apifox 的数据生成能力
22
23
  - 🌐 **Mock 服务器** - 基于 Express 的本地 Mock 服务,快速响应,支持 CORS
23
24
 
24
25
  ### 高级特性
26
+
25
27
  - 🔥 **热重载** - 修改 Mock 文件自动生效,无需重启服务器
26
28
  - 🎯 **API 筛选** - 支持路径、方法、标签、操作 ID 等多维度筛选
27
29
  - ⚡ **增量更新** - 智能识别文件变化,仅更新必要内容
@@ -39,6 +41,15 @@ pnpm add apifox-mock-generator -D
39
41
 
40
42
  ## 🚀 快速开始
41
43
 
44
+ ### 前置条件
45
+
46
+ 在开始使用之前,请确保满足以下条件:
47
+
48
+ - ✅ **Node.js 16+** - 确保已安装 Node.js 16 或更高版本
49
+ - ✅ **项目编译** - 运行 `npm run build` 编译 TypeScript 代码
50
+ - ✅ **Apifox 配置** - 创建 `apifox.config.json` 配置文件
51
+ - ✅ **Mock 文件生成** - 运行 `npm run generate` 生成 Mock 文件
52
+
42
53
  ### 1. 创建配置文件
43
54
 
44
55
  在你的项目根目录创建 `apifox.config.json`:
@@ -53,7 +64,6 @@ pnpm add apifox-mock-generator -D
53
64
  }
54
65
  ```
55
66
 
56
-
57
67
  ### 2. 配置 package.json 脚本
58
68
 
59
69
  ```json
@@ -78,6 +88,12 @@ npm run mock:generate
78
88
  npm run mock:serve
79
89
  ```
80
90
 
91
+ > ⚠️ **执行前提条件**:
92
+ >
93
+ > - 必须先运行 `npm run generate` 生成 Mock 文件
94
+ > - 确保 `apifox.config.json` 配置文件存在且配置正确
95
+ > - 确保 `mock/` 对应项目根目录存在且包含有效的 Mock 文件
96
+
81
97
  ### 5. 配置代理(Vite 项目)
82
98
 
83
99
  在 `vite.config.ts` 中:
@@ -92,21 +108,21 @@ export default defineConfig({
92
108
  }
93
109
  }
94
110
  }
95
- })
111
+ });
96
112
  ```
97
113
 
98
114
  ### 6. 使用生成的类型
99
115
 
100
116
  ```typescript
101
- import type { LoginRequest, LoginResponse } from './src/types/api/auth/login'
117
+ import type { LoginRequest, LoginResponse } from './src/types/api/auth/login';
102
118
 
103
119
  const login = async (data: LoginRequest): Promise<LoginResponse> => {
104
120
  const response = await fetch('/api/auth/login', {
105
121
  method: 'POST',
106
122
  body: JSON.stringify(data)
107
- })
108
- return response.json()
109
- }
123
+ });
124
+ return response.json();
125
+ };
110
126
  ```
111
127
 
112
128
  ## 🔧 配置说明
@@ -137,7 +153,7 @@ const login = async (data: LoginRequest): Promise<LoginResponse> => {
137
153
  "apiFilter": {
138
154
  "scope": {
139
155
  "type": "ALL",
140
- "excludedByTags": ["已废弃", "测试接口"]
156
+ "excludedByTags": ["设计中", "已废弃"]
141
157
  },
142
158
  "includePaths": ["/api/auth/**", "/api/user/**"],
143
159
  "excludePaths": ["/api/admin/**"],
@@ -151,33 +167,48 @@ const login = async (data: LoginRequest): Promise<LoginResponse> => {
151
167
 
152
168
  **`scope` 配置** - 控制从 Apifox 导出哪些接口:
153
169
 
154
- | 参数 | 类型 | 说明 |
155
- |------|------|------|
156
- | `type` | `'ALL' \| 'FOLDER' \| 'TAG' \| 'API_LIST'` | 导出类型:全部/按文件夹/按标签/按 API ID |
157
- | `includedByTags` | `string[]` | 包含的标签 |
158
- | `excludedByTags` | `string[]` | 排除的标签 |
159
- | `folderPath` | `string` | 文件夹路径(type 为 FOLDER 时) |
160
- | `apiIdList` | `string[]` | API ID 列表(type 为 API_LIST 时) |
170
+ | 参数 | 类型 | 说明 |
171
+ | ---------------- | ------------------------------------------ | --------------------------------------------------------- |
172
+ | `type` | `'ALL' \| 'FOLDER' \| 'TAG' \| 'API_LIST'` | 导出类型:全部/按文件夹/按标签/按 API ID |
173
+ | `includedByTags` | `string[]` | 包含的标签 |
174
+ | `excludedByTags` | `string[]` | 排除的接口状态(支持中文:`设计中`、`已废弃`、`待定` 等) |
175
+ | `folderPath` | `string` | 文件夹路径(type 为 FOLDER 时) |
176
+ | `apiIdList` | `string[]` | API ID 列表(type 为 API_LIST 时) |
161
177
 
162
178
  > 📝 **注意**: 系统默认启用 Apifox 扩展属性和文件夹标签功能,无需额外配置。
163
179
 
180
+ #### 接口状态映射
181
+
182
+ `excludedByTags` 支持中文状态配置,系统会自动映射到 Apifox 的英文状态:
183
+
184
+ | 中文状态 | 英文状态 | 说明 |
185
+ | -------- | ------------ | -------------- |
186
+ | `设计中` | `designing` | 接口正在设计中 |
187
+ | `开发中` | `developing` | 接口正在开发中 |
188
+ | `已完成` | `completed` | 接口开发完成 |
189
+ | `已废弃` | `deprecated` | 接口已废弃 |
190
+ | `待定` | `pending` | 接口状态待定 |
191
+ | `测试中` | `testing` | 接口正在测试 |
192
+ | `已发布` | `published` | 接口已发布 |
193
+
164
194
  #### 客户端过滤(生成时)
165
195
 
166
196
  在生成 Mock 和类型文件时进行二次过滤:
167
197
 
168
- | 参数 | 类型 | 说明 |
169
- |------|------|------|
170
- | `includePaths` | `string[]` | 只包含这些路径(支持 `*` 和 `**` 通配符) |
171
- | `excludePaths` | `string[]` | 排除这些路径 |
172
- | `includeOperationIds` | `string[]` | 只包含这些 operationId |
173
- | `excludeOperationIds` | `string[]` | 排除这些 operationId |
174
- | `excludeDeprecated` | `boolean` | 排除废弃的接口 |
175
- | `includeMethods` | `string[]` | 只包含这些 HTTP 方法 |
176
- | `excludeMethods` | `string[]` | 排除这些 HTTP 方法 |
198
+ | 参数 | 类型 | 说明 |
199
+ | --------------------- | ---------- | ----------------------------------------- |
200
+ | `includePaths` | `string[]` | 只包含这些路径(支持 `*` 和 `**` 通配符) |
201
+ | `excludePaths` | `string[]` | 排除这些路径 |
202
+ | `includeOperationIds` | `string[]` | 只包含这些 operationId |
203
+ | `excludeOperationIds` | `string[]` | 排除这些 operationId |
204
+ | `excludeDeprecated` | `boolean` | 排除废弃的接口 |
205
+ | `includeMethods` | `string[]` | 只包含这些 HTTP 方法 |
206
+ | `excludeMethods` | `string[]` | 排除这些 HTTP 方法 |
177
207
 
178
208
  #### 常用场景
179
209
 
180
210
  **场景 1:导出所有接口,排除已废弃**
211
+
181
212
  ```json
182
213
  {
183
214
  "apiFilter": {
@@ -190,6 +221,7 @@ const login = async (data: LoginRequest): Promise<LoginResponse> => {
190
221
  ```
191
222
 
192
223
  **场景 2:只导出指定文件夹**
224
+
193
225
  ```json
194
226
  {
195
227
  "apiFilter": {
@@ -202,6 +234,7 @@ const login = async (data: LoginRequest): Promise<LoginResponse> => {
202
234
  ```
203
235
 
204
236
  **场景 3:按标签导出**
237
+
205
238
  ```json
206
239
  {
207
240
  "apiFilter": {
@@ -214,6 +247,7 @@ const login = async (data: LoginRequest): Promise<LoginResponse> => {
214
247
  ```
215
248
 
216
249
  **场景 4:服务端 + 客户端双重过滤**
250
+
217
251
  ```json
218
252
  {
219
253
  "apiFilter": {
@@ -292,13 +326,13 @@ Mock 规则: @integer(0, 999) ← Mock.js 语法
292
326
 
293
327
  ```javascript
294
328
  Mock.mock({
295
- code: '@integer(0, 999)', // 直接使用 Mock.js 规则
329
+ code: '@integer(0, 999)', // 直接使用 Mock.js 规则
296
330
  data: {
297
- id: '@guid', // {{$string.uuid}} → @guid
298
- name: '@cname', // {{$person.fullName(locale='zh_CN')}} → @cname
299
- email: '@email' // 直接使用 Mock.js 规则
331
+ id: '@guid', // {{$string.uuid}} → @guid
332
+ name: '@cname', // {{$person.fullName(locale='zh_CN')}} → @cname
333
+ email: '@email' // 直接使用 Mock.js 规则
300
334
  }
301
- })
335
+ });
302
336
  ```
303
337
 
304
338
  #### 优势
@@ -328,11 +362,11 @@ export default {
328
362
  code: 0,
329
363
  message: 'success',
330
364
  data: {
331
- token: 'custom-token-12345', // 自定义数据
365
+ token: 'custom-token-12345', // 自定义数据
332
366
  userId: 10086
333
367
  }
334
368
  }
335
- }
369
+ };
336
370
  ```
337
371
 
338
372
  > ⚠️ 注意:重新运行 `apifox-mock generate` 会覆盖自定义的修改
@@ -413,6 +447,7 @@ npm run mock:generate
413
447
  ```
414
448
 
415
449
  执行过程:
450
+
416
451
  - 从 Apifox 拉取 API 定义
417
452
  - 应用筛选规则
418
453
  - 生成 TypeScript 类型 → `src/types/api/`
@@ -439,20 +474,20 @@ export default defineConfig({
439
474
  }
440
475
  }
441
476
  }
442
- })
477
+ });
443
478
  ```
444
479
 
445
480
  #### 5️⃣ 在代码中使用
446
481
 
447
482
  ```typescript
448
483
  // 导入类型
449
- import type { LoginRequest, LoginResponse } from '@/types/api/auth/login'
484
+ import type { LoginRequest, LoginResponse } from '@/types/api/auth/login';
450
485
 
451
486
  // 发起请求(自动代理到 Mock 服务器)
452
487
  const response = await fetch('/api/auth/login', {
453
488
  method: 'POST',
454
489
  body: JSON.stringify(data)
455
- })
490
+ });
456
491
  ```
457
492
 
458
493
  ### 项目结构
@@ -540,23 +575,23 @@ apifox-mock-generator/
540
575
 
541
576
  项目采用**模块化分层架构**,职责清晰分离:
542
577
 
543
- | 层级 | 目录 | 职责 |
544
- |------|------|------|
545
- | **核心层** | `core/` | Apifox API 交互、配置加载、OpenAPI 转换和过滤 |
546
- | **生成层** | `generators/` | Mock 和 TypeScript 类型生成、代码模板 |
547
- | **服务层** | `server/` | Express 服务器、动态路由、热重载、参数校验 |
548
- | **工具层** | `utils/` | 文件操作、增量更新、代码格式化、日志输出 |
549
- | **脚本层** | `scripts/` | CLI 命令入口(generate、serve) |
550
- | **类型层** | `types/` | 公共 TypeScript 类型定义 |
578
+ | 层级 | 目录 | 职责 |
579
+ | ---------- | ------------- | --------------------------------------------- |
580
+ | **核心层** | `core/` | Apifox API 交互、配置加载、OpenAPI 转换和过滤 |
581
+ | **生成层** | `generators/` | Mock 和 TypeScript 类型生成、代码模板 |
582
+ | **服务层** | `server/` | Express 服务器、动态路由、热重载、参数校验 |
583
+ | **工具层** | `utils/` | 文件操作、增量更新、代码格式化、日志输出 |
584
+ | **脚本层** | `scripts/` | CLI 命令入口(generate、serve) |
585
+ | **类型层** | `types/` | 公共 TypeScript 类型定义 |
551
586
 
552
587
  ## 🛠️ 脚本说明
553
588
 
554
- | 命令 | 说明 |
555
- |------|------|
556
- | `npm run build` | 编译 TypeScript 代码 |
589
+ | 命令 | 说明 |
590
+ | ------------------ | ------------------------------------------- |
591
+ | `npm run build` | 编译 TypeScript 代码 |
557
592
  | `npm run generate` | 一键生成(拉取 API + 生成 Mock + 生成类型) |
558
- | `npm run serve` | 启动 Mock 服务器 |
559
- | `npm run dev` | 开发模式(generate + serve) |
593
+ | `npm run serve` | 启动 Mock 服务器 |
594
+ | `npm run dev` | 开发模式(generate + serve) |
560
595
 
561
596
  ## 📚 技术栈
562
597
 
@@ -584,6 +619,7 @@ apifox-mock-generator/
584
619
  ### 1. 拉取 API 失败?
585
620
 
586
621
  检查:
622
+
587
623
  - `projectId` 和 `token` 是否正确
588
624
  - Token 是否有「项目维护者」或「管理员」权限
589
625
  - 网络连接是否正常
@@ -595,6 +631,7 @@ apifox-mock-generator/
595
631
  ### 3. 没有生成任何文件?
596
632
 
597
633
  检查:
634
+
598
635
  - `apiFilter` 筛选规则是否过于严格
599
636
  - Apifox 项目中是否有匹配的接口
600
637
  - 查看终端输出的错误信息
@@ -603,6 +640,7 @@ apifox-mock-generator/
603
640
  ### 4. 类型生成不准确?
604
641
 
605
642
  建议:
643
+
606
644
  - 在 Apifox 中完善接口的数据模型定义
607
645
  - 使用 JSON Schema 定义清晰的数据结构
608
646
  - 为每个字段添加描述和示例
@@ -610,10 +648,36 @@ apifox-mock-generator/
610
648
  ### 5. 热重载不生效?
611
649
 
612
650
  确认:
651
+
613
652
  - Mock 文件保存成功
614
653
  - 查看终端是否有文件变化的提示
615
654
  - 检查文件路径是否在 `mockDir` 配置的目录下
616
655
 
656
+ ### 6. 启动 Mock 服务器失败?
657
+
658
+ 检查以下条件:
659
+
660
+ - ✅ **配置文件存在** - 确保 `apifox.config.json` 在项目根目录
661
+ - ✅ **Mock 目录存在** - 确保 `mock/` 目录存在且不为空
662
+ - ✅ **项目已编译** - 运行 `npm run build` 编译代码
663
+ - ✅ **Mock 文件已生成** - 先运行 `npm run generate` 生成 Mock 文件
664
+ - ✅ **端口未被占用** - 检查 `mockPort` 配置的端口是否可用
665
+
666
+ 常见错误及解决方案:
667
+
668
+ ```bash
669
+ # 错误:未找到 apifox.config.json 配置文件
670
+ # 解决:创建配置文件
671
+ cp apifox.config.json.example apifox.config.json
672
+
673
+ # 错误:未找到 Mock 目录
674
+ # 解决:先生成 Mock 文件
675
+ npm run generate
676
+
677
+ # 错误:未找到任何 Mock 文件
678
+ # 解决:检查 API 筛选配置,确保有匹配的接口
679
+ ```
680
+
617
681
  ## 🤝 不同框架的配置示例
618
682
 
619
683
  ### Vue CLI 项目
@@ -629,7 +693,7 @@ module.exports = {
629
693
  }
630
694
  }
631
695
  }
632
- }
696
+ };
633
697
  ```
634
698
 
635
699
  ### React (Create React App)
@@ -647,7 +711,7 @@ module.exports = {
647
711
  // src/setupProxy.js
648
712
  const { createProxyMiddleware } = require('http-proxy-middleware');
649
713
 
650
- module.exports = function(app) {
714
+ module.exports = function (app) {
651
715
  app.use(
652
716
  '/api',
653
717
  createProxyMiddleware({
@@ -691,34 +755,38 @@ mock/
691
755
 
692
756
  ### 💡 最佳实践
693
757
 
694
- | 场景 | 建议 |
695
- |------|------|
696
- | **配置文件** | `apifox.config.json` 不要提交,提供 `.example` 示例 |
697
- | **类型文件** | 建议提交到 Git,团队共享类型定义 |
698
- | **Mock 数据** | 可以不提交,每个开发者自行生成 |
699
- | **切换环境** | 后端完成后只需修改代理配置,代码无需改动 |
758
+ | 场景 | 建议 |
759
+ | ------------- | --------------------------------------------------- |
760
+ | **配置文件** | `apifox.config.json` 不要提交,提供 `.example` 示例 |
761
+ | **类型文件** | 建议提交到 Git,团队共享类型定义 |
762
+ | **Mock 数据** | 可以不提交,每个开发者自行生成 |
763
+ | **切换环境** | 后端完成后只需修改代理配置,代码无需改动 |
700
764
 
701
765
  ## 📝 更新日志
702
766
 
703
767
  ### v1.1.0 (2025-10-13)
704
768
 
705
769
  #### 🎯 核心功能
770
+
706
771
  - 🎭 **直接使用 Apifox Mock 规则** - 使用 Apifox 中配置的 mock 规则,本地与云端保持完全一致
707
772
  - 🔄 **统一管理** - Mock 规则在 Apifox 平台统一管理,团队协作更方便
708
773
 
709
774
  #### ✨ 新功能
775
+
710
776
  - ✅ 支持 Apifox 的 `x-apifox-mock` 扩展字段,提取 mock 规则
711
777
  - ✅ 智能转换 Apifox 模板语法(`{{$xxx}}`)为 Mock.js 语法(`@xxx`)
712
778
  - ✅ 同时支持 Mock.js 和 Apifox 两种语法
713
779
  - ✅ 完善的回退策略(示例值 → 枚举值 → 基本规则)
714
780
 
715
781
  #### 📖 文档更新
782
+
716
783
  - 新增"Apifox Mock 规则"章节,说明使用方法
717
784
  - 更新项目结构说明
718
785
 
719
786
  ### v1.0.0 (2025-10-10)
720
787
 
721
788
  #### 核心功能
789
+
722
790
  - 🚀 **Apifox API 客户端** - 从 Apifox 项目拉取 API 接口定义
723
791
  - 📝 **类型生成器** - 自动生成 TypeScript 类型文件(.ts 格式)
724
792
  - 🎭 **Mock 生成器** - 基于 Schema 自动生成 Mock 数据文件
@@ -726,6 +794,7 @@ mock/
726
794
  - 🔥 **热重载** - 修改 Mock 文件自动生效,无需重启服务器
727
795
 
728
796
  #### 高级特性
797
+
729
798
  - 🎯 **API 筛选** - 支持路径、方法、标签、操作 ID 等多维度筛选
730
799
  - ⚡ **增量更新** - 智能识别文件变化,仅更新必要的内容
731
800
  - 🎨 **代码格式化** - 使用 Prettier 格式化生成的代码
@@ -734,6 +803,7 @@ mock/
734
803
  - ✅ **参数校验** - 基于 Schema 的请求参数验证
735
804
 
736
805
  #### 支持的特性
806
+
737
807
  - ✅ OpenAPI 3.0 规范
738
808
  - ✅ HTTP 方法:GET、POST、PUT、DELETE、PATCH
739
809
  - ✅ 路径参数、查询参数、请求体、响应体
@@ -848,4 +918,3 @@ copies or substantial portions of the Software.
848
918
  如有问题或建议,欢迎提 [Issue](https://github.com/yourname/apifox-mock-generator/issues)!
849
919
 
850
920
  ⭐ 如果这个项目对你有帮助,请给一个 Star!
851
-
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "apifox-mock-generator",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "从Apifox拉取API接口并生成本地mock和TypeScript类型文件",
5
5
  "main": "dist/src/index.js",
6
6
  "type": "module",
@@ -1 +1 @@
1
- {"version":3,"file":"apifox-client.d.ts","sourceRoot":"","sources":["../../../src/core/apifox-client.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAErD;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,CA6B/E"}
1
+ {"version":3,"file":"apifox-client.d.ts","sourceRoot":"","sources":["../../../src/core/apifox-client.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAErD;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,GAAG,CAAC,CA8Bd"}
@@ -1,5 +1,5 @@
1
1
  import axios from 'axios';
2
- import https from 'https';
2
+ import * as https from 'https';
3
3
  import { logger } from '../utils/logger.js';
4
4
  /**
5
5
  * 从 Apifox 拉取 OpenAPI 数据
@@ -12,14 +12,14 @@ export async function fetchOpenAPIFromApifox(config) {
12
12
  const requestBody = buildRequestBody(config);
13
13
  const response = await axios.post(apiUrl, requestBody, {
14
14
  headers: {
15
- 'Authorization': `Bearer ${config.token}`,
15
+ Authorization: `Bearer ${config.token}`,
16
16
  'Content-Type': 'application/json',
17
- 'X-Apifox-Api-Version': '2024-03-28'
17
+ 'X-Apifox-Api-Version': '2024-03-28',
18
18
  },
19
19
  httpsAgent: new https.Agent({
20
- rejectUnauthorized: false
20
+ rejectUnauthorized: false,
21
21
  }),
22
- timeout: 30000
22
+ timeout: 30000,
23
23
  });
24
24
  logger.success(`✓ 从 Apifox 拉取成功(${Object.keys(response.data.paths || {}).length} 个接口)`);
25
25
  return response.data;
@@ -35,7 +35,7 @@ export async function fetchOpenAPIFromApifox(config) {
35
35
  function buildRequestBody(config) {
36
36
  const requestBody = {
37
37
  oasVersion: '3.0',
38
- exportFormat: 'JSON'
38
+ exportFormat: 'JSON',
39
39
  };
40
40
  // 应用服务端过滤配置
41
41
  if (config.apiFilter) {
@@ -44,16 +44,16 @@ function buildRequestBody(config) {
44
44
  if (config.apiFilter.scope.type) {
45
45
  scope.type = config.apiFilter.scope.type;
46
46
  }
47
- if (config.apiFilter.scope.includedByTags && config.apiFilter.scope.includedByTags.length > 0) {
47
+ if (config.apiFilter.scope.includedByTags &&
48
+ config.apiFilter.scope.includedByTags.length > 0) {
48
49
  scope.includedByTags = config.apiFilter.scope.includedByTags;
49
50
  }
50
- if (config.apiFilter.scope.excludedByTags && config.apiFilter.scope.excludedByTags.length > 0) {
51
- scope.excludedByTags = config.apiFilter.scope.excludedByTags;
52
- }
51
+ // excludedByTags 现在是客户端过滤,不再发送到服务端
53
52
  if (config.apiFilter.scope.folderPath) {
54
53
  scope.folderPath = config.apiFilter.scope.folderPath;
55
54
  }
56
- if (config.apiFilter.scope.apiIdList && config.apiFilter.scope.apiIdList.length > 0) {
55
+ if (config.apiFilter.scope.apiIdList &&
56
+ config.apiFilter.scope.apiIdList.length > 0) {
57
57
  scope.apiIdList = config.apiFilter.scope.apiIdList;
58
58
  }
59
59
  if (Object.keys(scope).length > 0) {
@@ -63,7 +63,7 @@ function buildRequestBody(config) {
63
63
  // 始终启用 Apifox 扩展属性和文件夹标签(写死为 true)
64
64
  requestBody.options = {
65
65
  includeApifoxExtensionProperties: true,
66
- addFoldersToTags: true
66
+ addFoldersToTags: true,
67
67
  };
68
68
  }
69
69
  return requestBody;
@@ -1 +1 @@
1
- {"version":3,"file":"apifox-client.js","sourceRoot":"","sources":["../../../src/core/apifox-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"apifox-client.js","sourceRoot":"","sources":["../../../src/core/apifox-client.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"endpoint-filter.d.ts","sourceRoot":"","sources":["../../../src/core/endpoint-filter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAE/D;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAUhE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,WAAW,EAAE,EAAE,MAAM,CAAC,EAAE,SAAS,GAAG,WAAW,EAAE,CAgE3F"}
1
+ {"version":3,"file":"endpoint-filter.d.ts","sourceRoot":"","sources":["../../../src/core/endpoint-filter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAsB/D;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAUhE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,WAAW,EAAE,EACxB,MAAM,CAAC,EAAE,SAAS,GACjB,WAAW,EAAE,CAgGf"}