apifox-mock-generator 1.0.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.
- package/CHANGELOG.md +129 -1
- package/README.md +195 -63
- package/dist/package.json +1 -1
- package/dist/src/core/apifox-client.d.ts.map +1 -1
- package/dist/src/core/apifox-client.js +16 -23
- package/dist/src/core/apifox-client.js.map +1 -1
- package/dist/src/core/endpoint-filter.d.ts.map +1 -1
- package/dist/src/core/endpoint-filter.js +35 -5
- package/dist/src/core/endpoint-filter.js.map +1 -1
- package/dist/src/core/openapi-converter.d.ts.map +1 -1
- package/dist/src/core/openapi-converter.js +3 -2
- package/dist/src/core/openapi-converter.js.map +1 -1
- package/dist/src/generators/mock-generator.d.ts +2 -2
- package/dist/src/generators/mock-generator.d.ts.map +1 -1
- package/dist/src/generators/mock-generator.js +37 -9
- package/dist/src/generators/mock-generator.js.map +1 -1
- package/dist/src/generators/templates/file-architecture.d.ts +10 -0
- package/dist/src/generators/templates/file-architecture.d.ts.map +1 -0
- package/dist/src/generators/templates/file-architecture.js +18 -0
- package/dist/src/generators/templates/file-architecture.js.map +1 -0
- package/dist/src/generators/templates/mock-template.d.ts +2 -2
- package/dist/src/generators/templates/mock-template.d.ts.map +1 -1
- package/dist/src/generators/templates/mock-template.js +196 -103
- package/dist/src/generators/templates/mock-template.js.map +1 -1
- package/dist/src/generators/templates/smart-mock-rules.d.ts +47 -0
- package/dist/src/generators/templates/smart-mock-rules.d.ts.map +1 -0
- package/dist/src/generators/templates/smart-mock-rules.js +643 -0
- package/dist/src/generators/templates/smart-mock-rules.js.map +1 -0
- package/dist/src/generators/templates/type-template.d.ts +2 -14
- package/dist/src/generators/templates/type-template.d.ts.map +1 -1
- package/dist/src/generators/templates/type-template.js +279 -147
- package/dist/src/generators/templates/type-template.js.map +1 -1
- package/dist/src/generators/type-generator.d.ts.map +1 -1
- package/dist/src/generators/type-generator.js +2 -2
- package/dist/src/generators/type-generator.js.map +1 -1
- package/dist/src/types/index.d.ts +6 -4
- package/dist/src/types/index.d.ts.map +1 -1
- package/dist/src/types/mock/list.d.ts +12 -0
- package/dist/src/types/mock/list.d.ts.map +1 -0
- package/dist/src/types/mock/list.js +4 -0
- package/dist/src/types/mock/list.js.map +1 -0
- package/dist/src/types/mock/test.d.ts +12 -0
- package/dist/src/types/mock/test.d.ts.map +1 -0
- package/dist/src/types/mock/test.js +4 -0
- package/dist/src/types/mock/test.js.map +1 -0
- package/dist/src/types/mock/v1/auth/captcha.d.ts +18 -0
- package/dist/src/types/mock/v1/auth/captcha.d.ts.map +1 -0
- package/dist/src/types/mock/v1/auth/captcha.js +4 -0
- package/dist/src/types/mock/v1/auth/captcha.js.map +1 -0
- package/dist/src/types/mock/v1/auth/login/tenant.d.ts +26 -0
- package/dist/src/types/mock/v1/auth/login/tenant.d.ts.map +1 -0
- package/dist/src/types/mock/v1/auth/login/tenant.js +4 -0
- package/dist/src/types/mock/v1/auth/login/tenant.js.map +1 -0
- package/dist/src/types/mock/v1/auth/login/username.d.ts +40 -0
- package/dist/src/types/mock/v1/auth/login/username.d.ts.map +1 -0
- package/dist/src/types/mock/v1/auth/login/username.js +4 -0
- package/dist/src/types/mock/v1/auth/login/username.js.map +1 -0
- package/dist/src/types/mock/v1/auth/logout.d.ts +12 -0
- package/dist/src/types/mock/v1/auth/logout.d.ts.map +1 -0
- package/dist/src/types/mock/v1/auth/logout.js +4 -0
- package/dist/src/types/mock/v1/auth/logout.js.map +1 -0
- package/dist/src/types/mock/v1/role/list.d.ts +36 -0
- package/dist/src/types/mock/v1/role/list.d.ts.map +1 -0
- package/dist/src/types/mock/v1/role/list.js +4 -0
- package/dist/src/types/mock/v1/role/list.js.map +1 -0
- package/dist/src/types/mock/v1/role/permissions.d.ts +24 -0
- package/dist/src/types/mock/v1/role/permissions.d.ts.map +1 -0
- package/dist/src/types/mock/v1/role/permissions.js +4 -0
- package/dist/src/types/mock/v1/role/permissions.js.map +1 -0
- package/dist/src/types/mock/v1/role.d.ts +91 -0
- package/dist/src/types/mock/v1/role.d.ts.map +1 -0
- package/dist/src/types/mock/v1/role.js +4 -0
- package/dist/src/types/mock/v1/role.js.map +1 -0
- package/dist/src/types/mock/v1/tenant/permissions.d.ts +33 -0
- package/dist/src/types/mock/v1/tenant/permissions.d.ts.map +1 -0
- package/dist/src/types/mock/v1/tenant/permissions.js +4 -0
- package/dist/src/types/mock/v1/tenant/permissions.js.map +1 -0
- package/dist/src/types/mock/v1/tenant/user/disabled.d.ts +24 -0
- package/dist/src/types/mock/v1/tenant/user/disabled.d.ts.map +1 -0
- package/dist/src/types/mock/v1/tenant/user/disabled.js +4 -0
- package/dist/src/types/mock/v1/tenant/user/disabled.js.map +1 -0
- package/dist/src/types/mock/v1/tenant/user/list.d.ts +46 -0
- package/dist/src/types/mock/v1/tenant/user/list.d.ts.map +1 -0
- package/dist/src/types/mock/v1/tenant/user/list.js +4 -0
- package/dist/src/types/mock/v1/tenant/user/list.js.map +1 -0
- package/dist/src/types/mock/v1/tenant/user/role.d.ts +24 -0
- package/dist/src/types/mock/v1/tenant/user/role.d.ts.map +1 -0
- package/dist/src/types/mock/v1/tenant/user/role.js +4 -0
- package/dist/src/types/mock/v1/tenant/user/role.js.map +1 -0
- package/dist/src/types/mock/v1/tenant/user/unlink.d.ts +12 -0
- package/dist/src/types/mock/v1/tenant/user/unlink.d.ts.map +1 -0
- package/dist/src/types/mock/v1/tenant/user/unlink.js +4 -0
- package/dist/src/types/mock/v1/tenant/user/unlink.js.map +1 -0
- package/dist/src/types/mock/v1/tenant/user.d.ts +36 -0
- package/dist/src/types/mock/v1/tenant/user.d.ts.map +1 -0
- package/dist/src/types/mock/v1/tenant/user.js +4 -0
- package/dist/src/types/mock/v1/tenant/user.js.map +1 -0
- package/dist/src/types/mock/v1/user/avatar.d.ts +22 -0
- package/dist/src/types/mock/v1/user/avatar.d.ts.map +1 -0
- package/dist/src/types/mock/v1/user/avatar.js +4 -0
- package/dist/src/types/mock/v1/user/avatar.js.map +1 -0
- package/dist/src/types/mock/v1/user/info.d.ts +36 -0
- package/dist/src/types/mock/v1/user/info.d.ts.map +1 -0
- package/dist/src/types/mock/v1/user/info.js +4 -0
- package/dist/src/types/mock/v1/user/info.js.map +1 -0
- package/dist/src/types/mock/v1/user/password.d.ts +24 -0
- package/dist/src/types/mock/v1/user/password.d.ts.map +1 -0
- package/dist/src/types/mock/v1/user/password.js +4 -0
- package/dist/src/types/mock/v1/user/password.js.map +1 -0
- package/dist/src/types/mock/v1/user/permissions.d.ts +33 -0
- package/dist/src/types/mock/v1/user/permissions.d.ts.map +1 -0
- package/dist/src/types/mock/v1/user/permissions.js +4 -0
- package/dist/src/types/mock/v1/user/permissions.js.map +1 -0
- package/dist/src/types/mock/v1/user/self.d.ts +22 -0
- package/dist/src/types/mock/v1/user/self.d.ts.map +1 -0
- package/dist/src/types/mock/v1/user/self.js +4 -0
- package/dist/src/types/mock/v1/user/self.js.map +1 -0
- package/dist/src/types/mock/v1/user.d.ts +34 -0
- package/dist/src/types/mock/v1/user.d.ts.map +1 -0
- package/dist/src/types/mock/v1/user.js +4 -0
- package/dist/src/types/mock/v1/user.js.map +1 -0
- package/dist/src/utils/code-formatter.js +1 -1
- package/dist/src/utils/code-formatter.js.map +1 -1
- package/dist/src/utils/type-mapping.d.ts.map +1 -1
- package/dist/src/utils/type-mapping.js +7 -1
- package/dist/src/utils/type-mapping.js.map +1 -1
- package/package.json +60 -60
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,135 @@
|
|
|
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
|
+
|
|
58
|
+
## [1.1.0] - 2025-10-13
|
|
59
|
+
|
|
60
|
+
### 🎯 核心功能
|
|
61
|
+
|
|
62
|
+
#### 🎭 直接使用 Apifox Mock 规则
|
|
63
|
+
|
|
64
|
+
- **使用 Apifox 配置** - 直接使用 Apifox 中为字段配置的 mock 规则
|
|
65
|
+
- **统一管理** - Mock 规则在 Apifox 平台统一管理,本地与云端保持完全一致
|
|
66
|
+
- **零配置** - 在 Apifox 中配置好 mock 规则,生成时自动应用
|
|
67
|
+
|
|
68
|
+
### ✨ 新增功能
|
|
69
|
+
|
|
70
|
+
#### 🔄 Apifox Mock 规则支持
|
|
71
|
+
|
|
72
|
+
- **x-apifox-mock 字段** - 自动提取 Apifox 的 `x-apifox-mock` 扩展字段中的 mock 规则
|
|
73
|
+
- **智能语法转换** - 自动将 Apifox 模板语法(`{{$xxx}}`)转换为 Mock.js 语法(`@xxx`)
|
|
74
|
+
- **双语法支持** - 同时支持 Mock.js 语法和 Apifox 模板语法
|
|
75
|
+
- **自动应用** - 启用 `includeApifoxExtensionProperties` 后自动拉取和应用规则
|
|
76
|
+
|
|
77
|
+
支持的 Apifox 模板转换:
|
|
78
|
+
|
|
79
|
+
- `{{$string.uuid}}` → `@guid`
|
|
80
|
+
- `{{$person.fullName(locale='zh_CN')}}` → `@cname`
|
|
81
|
+
- `{{$internet.email}}` → `@email`
|
|
82
|
+
- `{{$phone.number}}` → `/^1[3-9]\\d{9}$/`
|
|
83
|
+
- 更多模板映射...
|
|
84
|
+
|
|
85
|
+
#### 📊 回退策略
|
|
86
|
+
|
|
87
|
+
当字段没有配置 Apifox mock 规则时,使用以下回退策略:
|
|
88
|
+
|
|
89
|
+
1. **示例值优先** - 使用 schema 中定义的 `example`
|
|
90
|
+
2. **枚举值** - 使用 `enum` 中的值(通过 `@pick` 随机选择)
|
|
91
|
+
3. **基本规则** - 根据字段类型使用简单的默认规则
|
|
92
|
+
- 字符串:`@cword(3, 8)`
|
|
93
|
+
- 数字/整数:根据 `minimum/maximum` 生成范围
|
|
94
|
+
- 布尔值:`@boolean`
|
|
95
|
+
|
|
96
|
+
### 📖 文档更新
|
|
97
|
+
|
|
98
|
+
- **README.md** - 新增"Apifox Mock 规则"章节
|
|
99
|
+
- 说明工作原理和使用方法
|
|
100
|
+
- 提供使用示例
|
|
101
|
+
- 更新项目结构说明
|
|
102
|
+
- **CHANGELOG.md** - 详细记录所有变更
|
|
103
|
+
|
|
104
|
+
### 🎯 优势
|
|
105
|
+
|
|
106
|
+
- ✅ **统一管理** - 在 Apifox 中统一管理所有 mock 规则,团队协作更方便
|
|
107
|
+
- ✅ **完全一致** - 本地 Mock 数据与 Apifox 云端 Mock 保持一致
|
|
108
|
+
- ✅ **零学习成本** - 使用 Apifox 原生的 mock 规则,无需学习新语法
|
|
109
|
+
- ✅ **功能完整** - 支持 Apifox 的所有 mock 规则和高级功能
|
|
110
|
+
|
|
111
|
+
### 🚀 使用示例
|
|
112
|
+
|
|
113
|
+
在 Apifox 中配置字段的 mock 规则:
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
字段名: email
|
|
117
|
+
类型: string
|
|
118
|
+
Mock 规则: @email
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
生成的 Mock 文件会自动应用该规则:
|
|
122
|
+
|
|
123
|
+
```javascript
|
|
124
|
+
Mock.mock({
|
|
125
|
+
email: '@email' // 直接使用 Apifox 配置的规则
|
|
126
|
+
});
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### ⚡ 兼容性
|
|
130
|
+
|
|
131
|
+
- 向下兼容 v1.0.0
|
|
132
|
+
- 无需修改配置文件
|
|
133
|
+
- 自动应用 Apifox mock 规则
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
8
137
|
## [1.0.0] - 2025-10-10
|
|
9
138
|
|
|
10
139
|
### ✨ 初始版本发布
|
|
@@ -128,4 +257,3 @@
|
|
|
128
257
|
## 许可证
|
|
129
258
|
|
|
130
259
|
MIT License - 详见 [LICENSE](./LICENSE) 文件
|
|
131
|
-
|
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
|
-
- 🎭 **Mock
|
|
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,14 +64,12 @@ pnpm add apifox-mock-generator -D
|
|
|
53
64
|
}
|
|
54
65
|
```
|
|
55
66
|
|
|
56
|
-
> ⚠️ 重要:此文件包含敏感信息,请添加到 `.gitignore`
|
|
57
|
-
|
|
58
67
|
### 2. 配置 package.json 脚本
|
|
59
68
|
|
|
60
69
|
```json
|
|
61
70
|
{
|
|
62
71
|
"scripts": {
|
|
63
|
-
"mock
|
|
72
|
+
"auto-mock": "apifox-mock generate",
|
|
64
73
|
"mock:serve": "apifox-mock serve",
|
|
65
74
|
"mock:dev": "apifox-mock dev"
|
|
66
75
|
}
|
|
@@ -79,6 +88,12 @@ npm run mock:generate
|
|
|
79
88
|
npm run mock:serve
|
|
80
89
|
```
|
|
81
90
|
|
|
91
|
+
> ⚠️ **执行前提条件**:
|
|
92
|
+
>
|
|
93
|
+
> - 必须先运行 `npm run generate` 生成 Mock 文件
|
|
94
|
+
> - 确保 `apifox.config.json` 配置文件存在且配置正确
|
|
95
|
+
> - 确保 `mock/` 对应项目根目录存在且包含有效的 Mock 文件
|
|
96
|
+
|
|
82
97
|
### 5. 配置代理(Vite 项目)
|
|
83
98
|
|
|
84
99
|
在 `vite.config.ts` 中:
|
|
@@ -93,21 +108,21 @@ export default defineConfig({
|
|
|
93
108
|
}
|
|
94
109
|
}
|
|
95
110
|
}
|
|
96
|
-
})
|
|
111
|
+
});
|
|
97
112
|
```
|
|
98
113
|
|
|
99
114
|
### 6. 使用生成的类型
|
|
100
115
|
|
|
101
116
|
```typescript
|
|
102
|
-
import type { LoginRequest, LoginResponse } from './src/types/api/auth/login'
|
|
117
|
+
import type { LoginRequest, LoginResponse } from './src/types/api/auth/login';
|
|
103
118
|
|
|
104
119
|
const login = async (data: LoginRequest): Promise<LoginResponse> => {
|
|
105
120
|
const response = await fetch('/api/auth/login', {
|
|
106
121
|
method: 'POST',
|
|
107
122
|
body: JSON.stringify(data)
|
|
108
|
-
})
|
|
109
|
-
return response.json()
|
|
110
|
-
}
|
|
123
|
+
});
|
|
124
|
+
return response.json();
|
|
125
|
+
};
|
|
111
126
|
```
|
|
112
127
|
|
|
113
128
|
## 🔧 配置说明
|
|
@@ -138,11 +153,7 @@ const login = async (data: LoginRequest): Promise<LoginResponse> => {
|
|
|
138
153
|
"apiFilter": {
|
|
139
154
|
"scope": {
|
|
140
155
|
"type": "ALL",
|
|
141
|
-
"excludedByTags": ["
|
|
142
|
-
},
|
|
143
|
-
"options": {
|
|
144
|
-
"includeApifoxExtensionProperties": false,
|
|
145
|
-
"addFoldersToTags": true
|
|
156
|
+
"excludedByTags": ["设计中", "已废弃"]
|
|
146
157
|
},
|
|
147
158
|
"includePaths": ["/api/auth/**", "/api/user/**"],
|
|
148
159
|
"excludePaths": ["/api/admin/**"],
|
|
@@ -156,38 +167,48 @@ const login = async (data: LoginRequest): Promise<LoginResponse> => {
|
|
|
156
167
|
|
|
157
168
|
**`scope` 配置** - 控制从 Apifox 导出哪些接口:
|
|
158
169
|
|
|
159
|
-
| 参数
|
|
160
|
-
|
|
161
|
-
| `type`
|
|
162
|
-
| `includedByTags` | `string[]`
|
|
163
|
-
| `excludedByTags` | `string[]`
|
|
164
|
-
| `folderPath`
|
|
165
|
-
| `apiIdList`
|
|
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 时) |
|
|
177
|
+
|
|
178
|
+
> 📝 **注意**: 系统默认启用 Apifox 扩展属性和文件夹标签功能,无需额外配置。
|
|
166
179
|
|
|
167
|
-
|
|
180
|
+
#### 接口状态映射
|
|
168
181
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
|
172
|
-
|
|
|
182
|
+
`excludedByTags` 支持中文状态配置,系统会自动映射到 Apifox 的英文状态:
|
|
183
|
+
|
|
184
|
+
| 中文状态 | 英文状态 | 说明 |
|
|
185
|
+
| -------- | ------------ | -------------- |
|
|
186
|
+
| `设计中` | `designing` | 接口正在设计中 |
|
|
187
|
+
| `开发中` | `developing` | 接口正在开发中 |
|
|
188
|
+
| `已完成` | `completed` | 接口开发完成 |
|
|
189
|
+
| `已废弃` | `deprecated` | 接口已废弃 |
|
|
190
|
+
| `待定` | `pending` | 接口状态待定 |
|
|
191
|
+
| `测试中` | `testing` | 接口正在测试 |
|
|
192
|
+
| `已发布` | `published` | 接口已发布 |
|
|
173
193
|
|
|
174
194
|
#### 客户端过滤(生成时)
|
|
175
195
|
|
|
176
196
|
在生成 Mock 和类型文件时进行二次过滤:
|
|
177
197
|
|
|
178
|
-
| 参数
|
|
179
|
-
|
|
180
|
-
| `includePaths`
|
|
181
|
-
| `excludePaths`
|
|
182
|
-
| `includeOperationIds` | `string[]` | 只包含这些 operationId
|
|
183
|
-
| `excludeOperationIds` | `string[]` | 排除这些 operationId
|
|
184
|
-
| `excludeDeprecated`
|
|
185
|
-
| `includeMethods`
|
|
186
|
-
| `excludeMethods`
|
|
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 方法 |
|
|
187
207
|
|
|
188
208
|
#### 常用场景
|
|
189
209
|
|
|
190
210
|
**场景 1:导出所有接口,排除已废弃**
|
|
211
|
+
|
|
191
212
|
```json
|
|
192
213
|
{
|
|
193
214
|
"apiFilter": {
|
|
@@ -200,6 +221,7 @@ const login = async (data: LoginRequest): Promise<LoginResponse> => {
|
|
|
200
221
|
```
|
|
201
222
|
|
|
202
223
|
**场景 2:只导出指定文件夹**
|
|
224
|
+
|
|
203
225
|
```json
|
|
204
226
|
{
|
|
205
227
|
"apiFilter": {
|
|
@@ -212,6 +234,7 @@ const login = async (data: LoginRequest): Promise<LoginResponse> => {
|
|
|
212
234
|
```
|
|
213
235
|
|
|
214
236
|
**场景 3:按标签导出**
|
|
237
|
+
|
|
215
238
|
```json
|
|
216
239
|
{
|
|
217
240
|
"apiFilter": {
|
|
@@ -224,6 +247,7 @@ const login = async (data: LoginRequest): Promise<LoginResponse> => {
|
|
|
224
247
|
```
|
|
225
248
|
|
|
226
249
|
**场景 4:服务端 + 客户端双重过滤**
|
|
250
|
+
|
|
227
251
|
```json
|
|
228
252
|
{
|
|
229
253
|
"apiFilter": {
|
|
@@ -269,6 +293,63 @@ npm run mock:dev
|
|
|
269
293
|
|
|
270
294
|
## 🎯 高级用法
|
|
271
295
|
|
|
296
|
+
### 🎭 Apifox Mock 规则
|
|
297
|
+
|
|
298
|
+
本工具**直接使用 Apifox 中配置的 mock 规则**,无需在本地重复配置。只需在 Apifox 中设置好字段的 mock 规则,生成时会自动应用。
|
|
299
|
+
|
|
300
|
+
#### 工作原理
|
|
301
|
+
|
|
302
|
+
1. **在 Apifox 中配置** - 为每个字段设置 mock 规则(支持 Mock.js 语法和 Apifox 模板语法)
|
|
303
|
+
2. **自动拉取规则** - 启用 `includeApifoxExtensionProperties` 后,导出的 OpenAPI 数据中会包含 `x-apifox-mock` 扩展字段
|
|
304
|
+
3. **智能转换** - 自动将 Apifox 模板语法(如 `{{$string.uuid}}`)转换为 Mock.js 语法(如 `@guid`)
|
|
305
|
+
4. **生成 Mock 文件** - 工具自动提取并转换 Apifox 的 mock 规则,生成本地 Mock 文件
|
|
306
|
+
|
|
307
|
+
#### 示例
|
|
308
|
+
|
|
309
|
+
在 Apifox 中配置字段的 mock 规则:
|
|
310
|
+
|
|
311
|
+
```
|
|
312
|
+
字段名: id
|
|
313
|
+
类型: string
|
|
314
|
+
Mock 规则: {{$string.uuid}} ← Apifox 模板语法
|
|
315
|
+
|
|
316
|
+
字段名: name
|
|
317
|
+
类型: string
|
|
318
|
+
Mock 规则: {{$person.fullName(locale='zh_CN')}}
|
|
319
|
+
|
|
320
|
+
字段名: code
|
|
321
|
+
类型: number
|
|
322
|
+
Mock 规则: @integer(0, 999) ← Mock.js 语法
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
生成的 Mock 文件会自动转换:
|
|
326
|
+
|
|
327
|
+
```javascript
|
|
328
|
+
Mock.mock({
|
|
329
|
+
code: '@integer(0, 999)', // 直接使用 Mock.js 规则
|
|
330
|
+
data: {
|
|
331
|
+
id: '@guid', // {{$string.uuid}} → @guid
|
|
332
|
+
name: '@cname', // {{$person.fullName(locale='zh_CN')}} → @cname
|
|
333
|
+
email: '@email' // 直接使用 Mock.js 规则
|
|
334
|
+
}
|
|
335
|
+
});
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
#### 优势
|
|
339
|
+
|
|
340
|
+
- ✅ **统一管理** - 在 Apifox 中统一管理所有 mock 规则,团队协作更方便
|
|
341
|
+
- ✅ **完全一致** - 本地 Mock 数据与 Apifox 云端 Mock 保持一致
|
|
342
|
+
- ✅ **智能转换** - 自动转换 Apifox 模板语法为 Mock.js 语法,无缝兼容
|
|
343
|
+
- ✅ **双语法支持** - 同时支持 Mock.js 语法(`@xxx`)和 Apifox 模板语法(`{{$xxx}}`)
|
|
344
|
+
|
|
345
|
+
#### 回退策略
|
|
346
|
+
|
|
347
|
+
如果字段没有配置 Apifox mock 规则,会使用以下回退策略:
|
|
348
|
+
|
|
349
|
+
1. **示例值** - 使用 schema 中定义的 `example`
|
|
350
|
+
2. **枚举值** - 使用 `enum` 中的值(通过 `@pick` 随机选择)
|
|
351
|
+
3. **基本规则** - 根据字段类型使用简单的默认规则(如字符串用 `@cword(3,8)`)
|
|
352
|
+
|
|
272
353
|
### 自定义 Mock 数据
|
|
273
354
|
|
|
274
355
|
修改生成的 Mock 文件(如 `mock/api/auth/login.js`):
|
|
@@ -281,11 +362,11 @@ export default {
|
|
|
281
362
|
code: 0,
|
|
282
363
|
message: 'success',
|
|
283
364
|
data: {
|
|
284
|
-
token: 'custom-token-12345',
|
|
365
|
+
token: 'custom-token-12345', // 自定义数据
|
|
285
366
|
userId: 10086
|
|
286
367
|
}
|
|
287
368
|
}
|
|
288
|
-
}
|
|
369
|
+
};
|
|
289
370
|
```
|
|
290
371
|
|
|
291
372
|
> ⚠️ 注意:重新运行 `apifox-mock generate` 会覆盖自定义的修改
|
|
@@ -366,6 +447,7 @@ npm run mock:generate
|
|
|
366
447
|
```
|
|
367
448
|
|
|
368
449
|
执行过程:
|
|
450
|
+
|
|
369
451
|
- 从 Apifox 拉取 API 定义
|
|
370
452
|
- 应用筛选规则
|
|
371
453
|
- 生成 TypeScript 类型 → `src/types/api/`
|
|
@@ -392,20 +474,20 @@ export default defineConfig({
|
|
|
392
474
|
}
|
|
393
475
|
}
|
|
394
476
|
}
|
|
395
|
-
})
|
|
477
|
+
});
|
|
396
478
|
```
|
|
397
479
|
|
|
398
480
|
#### 5️⃣ 在代码中使用
|
|
399
481
|
|
|
400
482
|
```typescript
|
|
401
483
|
// 导入类型
|
|
402
|
-
import type { LoginRequest, LoginResponse } from '@/types/api/auth/login'
|
|
484
|
+
import type { LoginRequest, LoginResponse } from '@/types/api/auth/login';
|
|
403
485
|
|
|
404
486
|
// 发起请求(自动代理到 Mock 服务器)
|
|
405
487
|
const response = await fetch('/api/auth/login', {
|
|
406
488
|
method: 'POST',
|
|
407
489
|
body: JSON.stringify(data)
|
|
408
|
-
})
|
|
490
|
+
});
|
|
409
491
|
```
|
|
410
492
|
|
|
411
493
|
### 项目结构
|
|
@@ -455,7 +537,7 @@ apifox-mock-generator/
|
|
|
455
537
|
│ │ └── openapi-converter.ts # OpenAPI 转换器
|
|
456
538
|
│ ├── generators/ # 生成器模块
|
|
457
539
|
│ │ ├── templates/ # 模板生成
|
|
458
|
-
│ │ │ ├── mock-template.ts # Mock
|
|
540
|
+
│ │ │ ├── mock-template.ts # Mock 文件模板(使用 Apifox mock 规则)
|
|
459
541
|
│ │ │ └── type-template.ts # TypeScript 类型模板
|
|
460
542
|
│ │ ├── mock-generator.ts # Mock 文件生成器
|
|
461
543
|
│ │ └── type-generator.ts # 类型文件生成器
|
|
@@ -493,23 +575,23 @@ apifox-mock-generator/
|
|
|
493
575
|
|
|
494
576
|
项目采用**模块化分层架构**,职责清晰分离:
|
|
495
577
|
|
|
496
|
-
| 层级
|
|
497
|
-
|
|
498
|
-
| **核心层** | `core/`
|
|
499
|
-
| **生成层** | `generators/` | Mock 和 TypeScript 类型生成、代码模板
|
|
500
|
-
| **服务层** | `server/`
|
|
501
|
-
| **工具层** | `utils/`
|
|
502
|
-
| **脚本层** | `scripts/`
|
|
503
|
-
| **类型层** | `types/`
|
|
578
|
+
| 层级 | 目录 | 职责 |
|
|
579
|
+
| ---------- | ------------- | --------------------------------------------- |
|
|
580
|
+
| **核心层** | `core/` | Apifox API 交互、配置加载、OpenAPI 转换和过滤 |
|
|
581
|
+
| **生成层** | `generators/` | Mock 和 TypeScript 类型生成、代码模板 |
|
|
582
|
+
| **服务层** | `server/` | Express 服务器、动态路由、热重载、参数校验 |
|
|
583
|
+
| **工具层** | `utils/` | 文件操作、增量更新、代码格式化、日志输出 |
|
|
584
|
+
| **脚本层** | `scripts/` | CLI 命令入口(generate、serve) |
|
|
585
|
+
| **类型层** | `types/` | 公共 TypeScript 类型定义 |
|
|
504
586
|
|
|
505
587
|
## 🛠️ 脚本说明
|
|
506
588
|
|
|
507
|
-
| 命令
|
|
508
|
-
|
|
509
|
-
| `npm run build`
|
|
589
|
+
| 命令 | 说明 |
|
|
590
|
+
| ------------------ | ------------------------------------------- |
|
|
591
|
+
| `npm run build` | 编译 TypeScript 代码 |
|
|
510
592
|
| `npm run generate` | 一键生成(拉取 API + 生成 Mock + 生成类型) |
|
|
511
|
-
| `npm run serve`
|
|
512
|
-
| `npm run dev`
|
|
593
|
+
| `npm run serve` | 启动 Mock 服务器 |
|
|
594
|
+
| `npm run dev` | 开发模式(generate + serve) |
|
|
513
595
|
|
|
514
596
|
## 📚 技术栈
|
|
515
597
|
|
|
@@ -537,6 +619,7 @@ apifox-mock-generator/
|
|
|
537
619
|
### 1. 拉取 API 失败?
|
|
538
620
|
|
|
539
621
|
检查:
|
|
622
|
+
|
|
540
623
|
- `projectId` 和 `token` 是否正确
|
|
541
624
|
- Token 是否有「项目维护者」或「管理员」权限
|
|
542
625
|
- 网络连接是否正常
|
|
@@ -548,6 +631,7 @@ apifox-mock-generator/
|
|
|
548
631
|
### 3. 没有生成任何文件?
|
|
549
632
|
|
|
550
633
|
检查:
|
|
634
|
+
|
|
551
635
|
- `apiFilter` 筛选规则是否过于严格
|
|
552
636
|
- Apifox 项目中是否有匹配的接口
|
|
553
637
|
- 查看终端输出的错误信息
|
|
@@ -556,6 +640,7 @@ apifox-mock-generator/
|
|
|
556
640
|
### 4. 类型生成不准确?
|
|
557
641
|
|
|
558
642
|
建议:
|
|
643
|
+
|
|
559
644
|
- 在 Apifox 中完善接口的数据模型定义
|
|
560
645
|
- 使用 JSON Schema 定义清晰的数据结构
|
|
561
646
|
- 为每个字段添加描述和示例
|
|
@@ -563,10 +648,36 @@ apifox-mock-generator/
|
|
|
563
648
|
### 5. 热重载不生效?
|
|
564
649
|
|
|
565
650
|
确认:
|
|
651
|
+
|
|
566
652
|
- Mock 文件保存成功
|
|
567
653
|
- 查看终端是否有文件变化的提示
|
|
568
654
|
- 检查文件路径是否在 `mockDir` 配置的目录下
|
|
569
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
|
+
|
|
570
681
|
## 🤝 不同框架的配置示例
|
|
571
682
|
|
|
572
683
|
### Vue CLI 项目
|
|
@@ -582,7 +693,7 @@ module.exports = {
|
|
|
582
693
|
}
|
|
583
694
|
}
|
|
584
695
|
}
|
|
585
|
-
}
|
|
696
|
+
};
|
|
586
697
|
```
|
|
587
698
|
|
|
588
699
|
### React (Create React App)
|
|
@@ -600,7 +711,7 @@ module.exports = {
|
|
|
600
711
|
// src/setupProxy.js
|
|
601
712
|
const { createProxyMiddleware } = require('http-proxy-middleware');
|
|
602
713
|
|
|
603
|
-
module.exports = function(app) {
|
|
714
|
+
module.exports = function (app) {
|
|
604
715
|
app.use(
|
|
605
716
|
'/api',
|
|
606
717
|
createProxyMiddleware({
|
|
@@ -644,18 +755,38 @@ mock/
|
|
|
644
755
|
|
|
645
756
|
### 💡 最佳实践
|
|
646
757
|
|
|
647
|
-
| 场景
|
|
648
|
-
|
|
649
|
-
| **配置文件**
|
|
650
|
-
| **类型文件**
|
|
651
|
-
| **Mock 数据** | 可以不提交,每个开发者自行生成
|
|
652
|
-
| **切换环境**
|
|
758
|
+
| 场景 | 建议 |
|
|
759
|
+
| ------------- | --------------------------------------------------- |
|
|
760
|
+
| **配置文件** | `apifox.config.json` 不要提交,提供 `.example` 示例 |
|
|
761
|
+
| **类型文件** | 建议提交到 Git,团队共享类型定义 |
|
|
762
|
+
| **Mock 数据** | 可以不提交,每个开发者自行生成 |
|
|
763
|
+
| **切换环境** | 后端完成后只需修改代理配置,代码无需改动 |
|
|
653
764
|
|
|
654
765
|
## 📝 更新日志
|
|
655
766
|
|
|
767
|
+
### v1.1.0 (2025-10-13)
|
|
768
|
+
|
|
769
|
+
#### 🎯 核心功能
|
|
770
|
+
|
|
771
|
+
- 🎭 **直接使用 Apifox Mock 规则** - 使用 Apifox 中配置的 mock 规则,本地与云端保持完全一致
|
|
772
|
+
- 🔄 **统一管理** - Mock 规则在 Apifox 平台统一管理,团队协作更方便
|
|
773
|
+
|
|
774
|
+
#### ✨ 新功能
|
|
775
|
+
|
|
776
|
+
- ✅ 支持 Apifox 的 `x-apifox-mock` 扩展字段,提取 mock 规则
|
|
777
|
+
- ✅ 智能转换 Apifox 模板语法(`{{$xxx}}`)为 Mock.js 语法(`@xxx`)
|
|
778
|
+
- ✅ 同时支持 Mock.js 和 Apifox 两种语法
|
|
779
|
+
- ✅ 完善的回退策略(示例值 → 枚举值 → 基本规则)
|
|
780
|
+
|
|
781
|
+
#### 📖 文档更新
|
|
782
|
+
|
|
783
|
+
- 新增"Apifox Mock 规则"章节,说明使用方法
|
|
784
|
+
- 更新项目结构说明
|
|
785
|
+
|
|
656
786
|
### v1.0.0 (2025-10-10)
|
|
657
787
|
|
|
658
788
|
#### 核心功能
|
|
789
|
+
|
|
659
790
|
- 🚀 **Apifox API 客户端** - 从 Apifox 项目拉取 API 接口定义
|
|
660
791
|
- 📝 **类型生成器** - 自动生成 TypeScript 类型文件(.ts 格式)
|
|
661
792
|
- 🎭 **Mock 生成器** - 基于 Schema 自动生成 Mock 数据文件
|
|
@@ -663,6 +794,7 @@ mock/
|
|
|
663
794
|
- 🔥 **热重载** - 修改 Mock 文件自动生效,无需重启服务器
|
|
664
795
|
|
|
665
796
|
#### 高级特性
|
|
797
|
+
|
|
666
798
|
- 🎯 **API 筛选** - 支持路径、方法、标签、操作 ID 等多维度筛选
|
|
667
799
|
- ⚡ **增量更新** - 智能识别文件变化,仅更新必要的内容
|
|
668
800
|
- 🎨 **代码格式化** - 使用 Prettier 格式化生成的代码
|
|
@@ -671,6 +803,7 @@ mock/
|
|
|
671
803
|
- ✅ **参数校验** - 基于 Schema 的请求参数验证
|
|
672
804
|
|
|
673
805
|
#### 支持的特性
|
|
806
|
+
|
|
674
807
|
- ✅ OpenAPI 3.0 规范
|
|
675
808
|
- ✅ HTTP 方法:GET、POST、PUT、DELETE、PATCH
|
|
676
809
|
- ✅ 路径参数、查询参数、请求体、响应体
|
|
@@ -785,4 +918,3 @@ copies or substantial portions of the Software.
|
|
|
785
918
|
如有问题或建议,欢迎提 [Issue](https://github.com/yourname/apifox-mock-generator/issues)!
|
|
786
919
|
|
|
787
920
|
⭐ 如果这个项目对你有帮助,请给一个 Star!
|
|
788
|
-
|
package/dist/package.json
CHANGED
|
@@ -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,
|
|
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"}
|