mock-service-cli 3.4.0 → 3.6.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/README.md +169 -252
- package/bin/mock-service-cli +20 -2
- package/lib/file-explorer.html +1099 -0
- package/lib/fileExplorerServer.js +278 -0
- package/package.json +8 -3
package/README.md
CHANGED
|
@@ -4,324 +4,241 @@
|
|
|
4
4
|
[](https://nodejs.org/download/release/v12.0.0/)
|
|
5
5
|
[](https://github.com/chandq/mock-service-cli/blob/master/LICENSE.md)
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
# 🦅 mock-service-cli
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
一个基于 Node.js 和 Express 的轻量级 Mock 套件命令行工具,提供本地开发调试所需的各种服务器功能。
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
## ✨ 核心功能
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
- **Mock Server** - 本地 Mock 服务器,支持热更新和多种请求方法
|
|
14
|
+
- **Static Server** - 静态资源服务器
|
|
15
|
+
- **SPA Server** - 单页应用服务器(模拟生产环境)
|
|
16
|
+
- **HTTP Proxy** - 本地接口代理服务
|
|
17
|
+
- **API Overview** - 现代化的 API 概览页面
|
|
18
|
+
- **File Explorer** - 现代化的文件浏览器
|
|
14
19
|
|
|
15
|
-
|
|
20
|
+
## 🚀 特性
|
|
16
21
|
|
|
17
|
-
|
|
22
|
+
- 📊 支持统计 mock 文件数量和请求数量
|
|
23
|
+
- 🔧 支持终端打开 mock 文件所在位置
|
|
24
|
+
- 🎨 自动生成和打开现代化的 API 概览页面
|
|
25
|
+
- 🌐 支持跨域配置
|
|
26
|
+
- 🔄 支持热更新(Mock 文件改动后自动重启)
|
|
27
|
+
- 📁 支持文件浏览器,可预览各种文件类型
|
|
28
|
+
- 💾 支持保存接口响应数据
|
|
29
|
+
- 🔗 支持 HTTP 请求代理
|
|
18
30
|
|
|
19
|
-
|
|
20
|
-
- 支持终端打开 mock 文件的所在位置
|
|
21
|
-
- 支持自动生成和打开现代化的 API 概览页面(按目录分类、可折叠展开、可点击测试 API)
|
|
31
|
+
## 📦 安装
|
|
22
32
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
**支持热更新,即 Mock 文件改动后自动重启服务**
|
|
30
|
-
|
|
31
|
-
> Mock File 仅支持 commonjs 规范的 js、cjs 文件,不支持 ES Module
|
|
32
|
-
|
|
33
|
-
支持以下常见业务场景:
|
|
34
|
-
|
|
35
|
-
- [x] 无服务端演示项目的数据 Mock
|
|
36
|
-
- [x] 业务开发接口联调前的数据 Mock
|
|
37
|
-
- [x] 保留业务项目的所有或部分接口的响应数据(写入文件)
|
|
38
|
-
- [x] 保障前端开发调试不受后端服务影响(当后端服务挂掉或部分接口响应异常时启用 Mock)
|
|
39
|
-
|
|
40
|
-
#### Web Server - SPA Web 服务器
|
|
41
|
-
|
|
42
|
-
对 React、Vue 等单页应用项目构建生成的 dist 目录,启动本地 web 服务器(相当于使用本地安装的 nginx 服务)来模拟运行生产环境下的 web 服务
|
|
43
|
-
|
|
44
|
-
#### Http request proxy - 基于浏览器的本地代理服务
|
|
45
|
-
|
|
46
|
-
实现了本地接口代理的能力,一般接口测试工具无法查看到 request 和 response 中 headers 的更多详情,这里实现了接口代理功能,在 Network 中可查看接口调用的详细信息。
|
|
47
|
-
|
|
48
|
-
> 两种应用场景
|
|
49
|
-
|
|
50
|
-
- 项目 dev 模式下的接口代理请求
|
|
51
|
-
- Chrome 的 Console 执行 fetch 请求(用于接口测试)
|
|
52
|
-
|
|
53
|
-
## Installation:
|
|
54
|
-
|
|
55
|
-
#### Running on-demand:
|
|
56
|
-
|
|
57
|
-
Using `npx` you can run the script without installing it first:
|
|
58
|
-
|
|
59
|
-
npx mock-service-cli [path] [options]
|
|
60
|
-
|
|
61
|
-
#### Globally via `npm`
|
|
62
|
-
|
|
63
|
-
npm install --global mock-service-cli
|
|
64
|
-
|
|
65
|
-
This will install `mock-service-cli` globally so that it may be run from the command line anywhere.
|
|
66
|
-
|
|
67
|
-
#### Globally via Homebrew
|
|
68
|
-
|
|
69
|
-
brew install mock-service-cli
|
|
70
|
-
|
|
71
|
-
#### As a dependency in your `npm` package:
|
|
72
|
-
|
|
73
|
-
npm install mock-service-cli
|
|
74
|
-
|
|
75
|
-
## Usage:
|
|
76
|
-
|
|
77
|
-
mock-service-cli [options] [path]
|
|
78
|
-
|
|
79
|
-
`[path]` defaults to `./mock` .
|
|
80
|
-
|
|
81
|
-
| Command | Description | Defaults |
|
|
82
|
-
| -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- |
|
|
83
|
-
| `-h` or `--help` | Print this list and exit. | |
|
|
84
|
-
| `-p` or `--port` | Mock server port to use. Use `-p 8090` to look for an open port, starting at 8090. | 8090 |
|
|
85
|
-
| `-d` | Specify mock directory | ./mock |
|
|
86
|
-
| `-f` | Specify mock file | |
|
|
87
|
-
| `-s` or `--silent` | Suppress log messages from output | |
|
|
88
|
-
| `-v` or `--version` | Print the version and exit. | |
|
|
89
|
-
| `-S` or `--socket-server` | Start socket server which used to save api response data for future mock. | false |
|
|
90
|
-
| `-a` or `--api-stat` | Whether print api url and file path info or not, default false. | false |
|
|
91
|
-
| `-t` or `--track` | Whether record operation info by write file, default false. | false |
|
|
92
|
-
| `-o` or `--cors-origin` | Allow origin by cors, list separated by commas, must not be \* when withCredential is true .If specified, cors-headers will be `Authorization,Content-Type,Accept,Origin,User-Agent,DNT,Cache-Control,X-Mx-ReqToken,X-Data-Type,X-Requested-With,X-Data-Type,X-Auth-Token,Token` | \* |
|
|
93
|
-
| `-O` or `--proxy-options` | Optionally provide http request proxy options list, support accept js file、json file、cli arguments string. Examples: `-O '/api/apaas\|http://192.168.0.105:60700,/api/permission\| http://192.168.0.105:60700'`. Must start web server to use proxy for http request test under browser console or api test tools. | - |
|
|
94
|
-
| `-H` or `--cors-headers` | When start Mock Server, optionally provide CORS headers list separated by commas. default . | \* |
|
|
95
|
-
| `-A` or `--append-headers` | When start Mock/Web/Static Server, optionally add response headers list separated by commas. For example: X-Frame-options=DENY,content-security-policy=frame-ancestors. | - |
|
|
96
|
-
| `-P` or `--web-port` | Web server port to use. Use `-P 9090` to look for an open port, starting at 9090. | 9090 |
|
|
97
|
-
| `-b` or `--web-baseurl` | Specify public path of the SPA web server, can be base address of SPA route. | - |
|
|
98
|
-
| `-R` or `--static-server` | Specify directory of the Static Web Server. | - |
|
|
99
|
-
| `-w` or `--open` | Open API overview page automatically. | false |
|
|
100
|
-
|
|
101
|
-
## Example
|
|
102
|
-
|
|
103
|
-
1. Specify static resource file directory to startup Static Server.
|
|
104
|
-
|
|
105
|
-
`mock-service-cli -R ./test`
|
|
106
|
-
|
|
107
|
-
2. Specify mock server port.
|
|
108
|
-
|
|
109
|
-
`mock-service-cli -p 8085`
|
|
110
|
-
|
|
111
|
-
3. Enable cors of mock server, specify the origin and headers of http request.
|
|
112
|
-
|
|
113
|
-
`mock-service-cli -o "http://192.168.0.8:38200,http://10.30.30.3" -H "custom-header"`
|
|
114
|
-
|
|
115
|
-
4. Specify mock directory to startup Mock Server.
|
|
116
|
-
|
|
117
|
-
`mock-service-cli -d ./mock`
|
|
118
|
-
|
|
119
|
-
5. Specify mock file to startup Mock Server.
|
|
120
|
-
|
|
121
|
-
`mock-service-cli -f ./mock/test.js`
|
|
122
|
-
|
|
123
|
-
6. Start socket server for used to save api response data.
|
|
124
|
-
|
|
125
|
-
`mock-service-cli -S`
|
|
126
|
-
|
|
127
|
-
7. Only Used as api server for test on browser console or api request tools.
|
|
128
|
-
> must specified server directory which can be empty but not includes index.html file, and also need config API proxy.
|
|
129
|
-
|
|
130
|
-
`mock-service-cli -D server -O '/api/apaas|http://192.168.0.105:60700'`
|
|
131
|
-
|
|
132
|
-
8. Start static web server for SPA, and optionally specify public path and port.
|
|
133
|
-
|
|
134
|
-
`mock-service-cli -D ../react-best-practice/dist [-b '/redbridge/'] [-P 9090]`
|
|
135
|
-
|
|
136
|
-
9. Enable Proxy base on above item 7. support accept js file、json file、cli arguments string
|
|
33
|
+
### 全局安装
|
|
34
|
+
```bash
|
|
35
|
+
npm install --global mock-service-cli
|
|
36
|
+
# 或
|
|
37
|
+
brew install mock-service-cli
|
|
38
|
+
```
|
|
137
39
|
|
|
138
|
-
|
|
40
|
+
### 局部安装
|
|
41
|
+
```bash
|
|
42
|
+
npm install mock-service-cli --save-dev
|
|
43
|
+
```
|
|
139
44
|
|
|
140
|
-
|
|
45
|
+
### 直接运行
|
|
46
|
+
```bash
|
|
47
|
+
npx mock-service-cli [options] [path]
|
|
48
|
+
```
|
|
141
49
|
|
|
142
|
-
|
|
50
|
+
## 🛠️ 命令行选项
|
|
51
|
+
|
|
52
|
+
| 选项 | 描述 | 默认值 |
|
|
53
|
+
| ------------------------- | ------------------------------------------------------------------------------------------------------------ | --------- |
|
|
54
|
+
| `-h` 或 `--help` | 显示帮助信息 | - |
|
|
55
|
+
| `-p` 或 `--port` | Mock 服务器端口 | 8090 |
|
|
56
|
+
| `-d` | 指定 mock 目录 | ./mock |
|
|
57
|
+
| `-f` | 指定单个 mock 文件 | - |
|
|
58
|
+
| `-s` 或 `--silent` | 抑制日志输出 | - |
|
|
59
|
+
| `-v` 或 `--version` | 显示版本信息 | - |
|
|
60
|
+
| `-S` 或 `--socket-server` | 启动 socket 服务器,用于保存 API 响应数据 | false |
|
|
61
|
+
| `-a` 或 `--api-stat` | 打印 API URL 和文件路径信息 | false |
|
|
62
|
+
| `-t` 或 `--track` | 记录操作信息到文件 | false |
|
|
63
|
+
| `-o` 或 `--cors-origin` | 配置 CORS 允许的源,多个源用逗号分隔 | * |
|
|
64
|
+
| `-O` 或 `--proxy-options` | 配置 HTTP 请求代理选项,支持 js 文件、json 文件或命令行参数 | - |
|
|
65
|
+
| `-H` 或 `--cors-headers` | 配置 CORS 头信息 | * |
|
|
66
|
+
| `-A` 或 `--append-headers`| 添加响应头信息,多个头用逗号分隔 | - |
|
|
67
|
+
| `-D` 或 `--web-dir` | 启用 Web 服务器,指定 web 目录(SPA 应用) | - |
|
|
68
|
+
| `-P` 或 `--web-port` | Web 服务器端口 | 9090 |
|
|
69
|
+
| `-b` 或 `--web-baseurl` | 指定 SPA Web 服务器的公共路径 | - |
|
|
70
|
+
| `-R` 或 `--static-server` | 启用静态服务器,指定静态资源目录 | - |
|
|
71
|
+
| `-w` 或 `--open` | 自动打开 API 概览页面 | false |
|
|
72
|
+
| `-e` 或 `--explorer` | 启用文件浏览器服务器,指定要浏览的目录 | ./ |
|
|
73
|
+
|
|
74
|
+
## 📖 使用示例
|
|
75
|
+
|
|
76
|
+
### Mock 服务器
|
|
77
|
+
```bash
|
|
78
|
+
# 使用默认配置启动 Mock 服务器
|
|
79
|
+
mock-service-cli
|
|
80
|
+
|
|
81
|
+
# 指定端口和目录
|
|
82
|
+
mock-service-cli -p 8080 -d ./api
|
|
83
|
+
|
|
84
|
+
# 自动打开 API 概览页面
|
|
85
|
+
mock-service-cli --open
|
|
86
|
+
|
|
87
|
+
# 使用单个 Mock 文件
|
|
88
|
+
mock-service-cli -f ./mock.js
|
|
89
|
+
```
|
|
143
90
|
|
|
144
|
-
|
|
91
|
+
### 静态服务器
|
|
92
|
+
```bash
|
|
93
|
+
# 启动静态服务器
|
|
94
|
+
mock-service-cli -R ./public
|
|
95
|
+
```
|
|
145
96
|
|
|
146
|
-
|
|
97
|
+
### Web 服务器 (SPA)
|
|
98
|
+
```bash
|
|
99
|
+
# 启动 SPA 服务器
|
|
100
|
+
mock-service-cli -D ./dist
|
|
147
101
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
'/api/apaas': 'http://192.168.0.105:60700',
|
|
151
|
-
'/api/permission': 'http://192.168.0.105:60700'
|
|
152
|
-
};
|
|
102
|
+
# 指定公共路径和端口
|
|
103
|
+
mock-service-cli -D ./dist -b /app -P 9090
|
|
153
104
|
```
|
|
154
105
|
|
|
155
|
-
|
|
106
|
+
### HTTP 代理
|
|
107
|
+
```bash
|
|
108
|
+
# 启动带代理的 Web 服务器
|
|
109
|
+
mock-service-cli -D ./ -O '/api|http://localhost:3000'
|
|
156
110
|
|
|
157
|
-
|
|
111
|
+
# 使用代理配置文件
|
|
112
|
+
mock-service-cli -D ./ -O ./proxy.js
|
|
113
|
+
```
|
|
158
114
|
|
|
159
|
-
|
|
115
|
+
### 文件浏览器
|
|
116
|
+
```bash
|
|
117
|
+
# 浏览当前目录
|
|
118
|
+
mock-service-cli -e ./
|
|
160
119
|
|
|
161
|
-
|
|
120
|
+
# 浏览指定目录
|
|
121
|
+
mock-service-cli -e /path/to/directory
|
|
162
122
|
|
|
163
|
-
|
|
123
|
+
# 指定端口
|
|
124
|
+
mock-service-cli -e ./ -p 9090
|
|
125
|
+
```
|
|
164
126
|
|
|
165
|
-
|
|
127
|
+
## 📝 编写 Mock 文件
|
|
166
128
|
|
|
167
|
-
|
|
129
|
+
Mock 文件支持 CommonJS 规范,不支持 ES Module。
|
|
168
130
|
|
|
169
131
|
```javascript
|
|
132
|
+
// mock/test.js
|
|
170
133
|
module.exports = {
|
|
171
134
|
// GET 可忽略
|
|
172
|
-
'/mock/
|
|
135
|
+
'/mock/api/test': { aa: 1, bb: '默认GET请求' },
|
|
173
136
|
'GET /mock/api/:id/test': { aa: 1, bb: '使用id占位符' },
|
|
174
|
-
'GET /mock/api/test1': { aa: 1, bb: '指定GET 方法' },
|
|
175
137
|
'POST /mock/api/test': { aa: 1, bb: 'POST 方法' },
|
|
176
138
|
'DELETE /mock/api/test': { aa: 1, bb: 'DELETE 方法' },
|
|
177
|
-
|
|
178
|
-
'PATCH /mock/api/test': { aa: 1, bb: 'PATCH 方法' },
|
|
179
|
-
'OPTIONS /mock/api/test': { aa: 1, bb: 'OPTIONS 方法' },
|
|
180
|
-
'COPY /mock/api/test': { aa: 1, bb: 'COPY 方法' },
|
|
181
|
-
'LINK /mock/api/test': { aa: 1, bb: 'LINK 方法' },
|
|
182
|
-
'UNLINK /mock/api/test': { aa: 1, bb: 'UNLINK 方法' },
|
|
183
|
-
'PURGE /mock/api/test': { aa: 1, bb: 'PURGE 方法' },
|
|
184
|
-
// 支持自定义函数,API 参考 express@4
|
|
139
|
+
// 支持自定义函数
|
|
185
140
|
'/mock/api/video/test': (req, res) => {
|
|
186
|
-
// 添加特定请求头token
|
|
187
141
|
res.header('token', '5848778333359208');
|
|
188
142
|
res.json({ aa: 1, bb: 'asdf' });
|
|
189
143
|
}
|
|
190
144
|
};
|
|
191
145
|
```
|
|
192
146
|
|
|
193
|
-
然后访问 `本地代理地址` + `/mock/api/222/test` (例如`http://127.0.0.1:8090/mock/api/222/test`) 就能得到 { aa: 1, bb: '使用 id 占位符' } 的响应,其他以此类推。
|
|
194
|
-
|
|
195
|
-

|
|
196
|
-
|
|
197
147
|
### 引入 Mock.js
|
|
198
148
|
|
|
199
|
-
[Mock.js](http://mockjs.com/)
|
|
200
|
-
|
|
201
|
-
比如:
|
|
149
|
+
可以使用 [Mock.js](http://mockjs.com/) 生成模拟数据:
|
|
202
150
|
|
|
203
|
-
```
|
|
151
|
+
```javascript
|
|
204
152
|
const mockjs = require('mockjs');
|
|
205
153
|
|
|
206
154
|
module.exports = {
|
|
207
|
-
// 使用 mockjs 等三方库
|
|
208
155
|
'GET /api/tags': mockjs.mock({
|
|
209
|
-
'list|100': [
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
urgentType: '@cword(3, 5)',
|
|
215
|
-
'isCrash|1': 'true',
|
|
216
|
-
createTime: '@date',
|
|
217
|
-
'value|1-100': 50,
|
|
218
|
-
'type|0-2': 1
|
|
219
|
-
}
|
|
220
|
-
]
|
|
156
|
+
'list|100': [{
|
|
157
|
+
'NO|+1': 1,
|
|
158
|
+
city: '@city',
|
|
159
|
+
'value|1-100': 50
|
|
160
|
+
}]
|
|
221
161
|
})
|
|
222
162
|
};
|
|
223
163
|
```
|
|
224
164
|
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-

|
|
228
|
-
|
|
229
|
-
### 启动 Web Server, 启用 Proxy
|
|
165
|
+
## 🎨 API 概览页面
|
|
230
166
|
|
|
231
|
-
|
|
167
|
+
现代化的 Web 界面,用于展示和测试所有已注册的 Mock API 接口。
|
|
232
168
|
|
|
233
|
-
###
|
|
169
|
+
### 功能特性
|
|
170
|
+
- 📁 按目录分类展示 API
|
|
171
|
+
- 🔍 支持搜索接口
|
|
172
|
+
- 🎯 每种 HTTP 方法使用不同颜色标签
|
|
173
|
+
- 🧪 支持直接在页面中测试 API
|
|
174
|
+
- 📋 响应数据格式化展示
|
|
234
175
|
|
|
235
|
-
|
|
176
|
+
### 访问方式
|
|
177
|
+
- **自动打开**:使用 `--open` 参数
|
|
178
|
+
- **手动访问**:`http://localhost:8090/__api-overview`
|
|
236
179
|
|
|
237
|
-
|
|
180
|
+
## 📁 文件浏览器
|
|
238
181
|
|
|
239
|
-
|
|
240
|
-
- 目录可折叠/展开
|
|
241
|
-
- 支持按 URL 或 HTTP 方法搜索接口
|
|
242
|
-
- 每种 HTTP 方法使用不同颜色的标签(GET、POST、PUT、DELETE 等)
|
|
243
|
-
- 点击接口可查看详细信息
|
|
244
|
-
- 支持直接在页面中测试 API(发送请求并查看响应)
|
|
245
|
-
- 响应数据格式化展示
|
|
182
|
+
现代化的文件浏览界面,支持目录导航、文件预览和管理。
|
|
246
183
|
|
|
247
|
-
|
|
184
|
+
### 功能特性
|
|
185
|
+
- 📁 **目录导航**:面包屑导航,支持快速跳转
|
|
186
|
+
- 👁️ **文件预览**:
|
|
187
|
+
- 图片文件:直接预览(JPG、PNG、GIF、WebP 等)
|
|
188
|
+
- 文本文件:代码高亮预览(JS、JSON、HTML、CSS 等)
|
|
189
|
+
- 其他文件:提供下载
|
|
190
|
+
- 🎨 **图标标识**:不同文件类型使用不同颜色图标
|
|
191
|
+
- 📱 **视图切换**:网格视图和列表视图
|
|
192
|
+
- ⚡ **操作功能**:
|
|
193
|
+
- 在系统文件管理器中打开
|
|
194
|
+
- 复制文件路径
|
|
195
|
+
- 下载文件
|
|
196
|
+
- 刷新目录
|
|
197
|
+
- 显示/隐藏隐藏文件
|
|
198
|
+
- 🔍 **搜索**:支持文件名模糊搜索
|
|
199
|
+
- 📊 **排序**:按名称、时间、大小排序
|
|
200
|
+
- ⌨️ **键盘快捷键**:
|
|
201
|
+
- `Escape`:关闭预览
|
|
202
|
+
- `Backspace`:返回上级
|
|
248
203
|
|
|
249
|
-
|
|
204
|
+
### 界面预览
|
|
205
|
+
- 渐变紫色现代化设计
|
|
206
|
+
- 响应式布局
|
|
207
|
+
- 流畅的交互体验
|
|
250
208
|
|
|
251
|
-
|
|
252
|
-
mock-service-cli --open
|
|
253
|
-
```
|
|
209
|
+
## 🔧 高级功能
|
|
254
210
|
|
|
255
|
-
|
|
256
|
-
```
|
|
257
|
-
http://localhost:8090/__api-overview
|
|
258
|
-
```
|
|
211
|
+
### 保存接口响应数据
|
|
259
212
|
|
|
260
|
-
|
|
213
|
+
使用 Socket.io 保存接口响应数据,用于后续 Mock:
|
|
261
214
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
- 统计卡片:展示总接口数、目录数、各 HTTP 方法数量
|
|
265
|
-
- 搜索框:快速查找接口
|
|
266
|
-
- 目录列表:按目录分组展示所有接口
|
|
267
|
-
- 测试面板:点击接口后可进行测试
|
|
268
|
-
|
|
269
|
-
### 借助 socket.io 保留接口数据
|
|
270
|
-
|
|
271
|
-
> `save-data` 和 `mock-dir-stat` 事件会自动生成 `mock-list.json` 文件(维护接口`<url, [method]>`的关系映射),方便查阅接口统计信息
|
|
272
|
-
|
|
273
|
-
```js
|
|
274
|
-
// 连接SocketServer
|
|
215
|
+
```javascript
|
|
275
216
|
import { io } from 'socket.io-client';
|
|
276
217
|
|
|
277
|
-
const socket = io.connect('http://
|
|
218
|
+
const socket = io.connect('http://localhost:8090/mock-data', {
|
|
278
219
|
transports: ['websocket'],
|
|
279
220
|
path: '/ws/mock-service'
|
|
280
221
|
});
|
|
281
|
-
|
|
222
|
+
|
|
223
|
+
// 保存接口数据
|
|
282
224
|
socket.emit('save-data', { url, method, data, dir });
|
|
283
|
-
|
|
225
|
+
|
|
226
|
+
// 获取目录统计信息
|
|
284
227
|
socket.emit('mock-dir-stat', dirPath);
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
socket.emit('mock-file-stat', filePath);
|
|
289
|
-
// 监听SocketServer消息:获取指定文件的Mock统计信息
|
|
290
|
-
socket.on('mock-file-stat', function (mockFileStat) {});
|
|
228
|
+
socket.on('mock-dir-stat', (data) => {
|
|
229
|
+
console.log('统计信息:', data);
|
|
230
|
+
});
|
|
291
231
|
```
|
|
292
232
|
|
|
293
|
-
|
|
233
|
+
## 📚 文档
|
|
294
234
|
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
import axios from 'axios';
|
|
235
|
+
- [GitHub 仓库](https://github.com/chandq/mock-service-cli)
|
|
236
|
+
- [npm 包](https://www.npmjs.com/package/mock-service-cli)
|
|
298
237
|
|
|
299
|
-
|
|
300
|
-
transports: ['websocket'],
|
|
301
|
-
path: '/ws/mock-service',
|
|
302
|
-
query: {
|
|
303
|
-
token: 'yyds'
|
|
304
|
-
}
|
|
305
|
-
});
|
|
238
|
+
## 🤝 贡献
|
|
306
239
|
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
axios.interceptors.response.use(res => {
|
|
313
|
-
const {
|
|
314
|
-
config: { method, url },
|
|
315
|
-
data
|
|
316
|
-
} = res;
|
|
317
|
-
socket.emit('save-data', { url, method, data, dir: '/home/chen/projects/model-ui/mock' });
|
|
318
|
-
return res;
|
|
319
|
-
});
|
|
320
|
-
// 根据Mock数据池自动Mock(也可根据实际场景决定是否Mock)
|
|
321
|
-
axios.interceptors.request.use(config => {
|
|
322
|
-
if (Object.keys(mockObj).includes(`${config.method} ${config.url}`)) {
|
|
323
|
-
config.baseURL = 'http://localhost:8090';
|
|
324
|
-
}
|
|
325
|
-
return config;
|
|
326
|
-
});
|
|
327
|
-
```
|
|
240
|
+
欢迎提交 Issue 和 Pull Request!
|
|
241
|
+
|
|
242
|
+
## 📄 许可证
|
|
243
|
+
|
|
244
|
+
MIT License - 详见 [LICENSE.md](LICENSE.md)
|
package/bin/mock-service-cli
CHANGED
|
@@ -46,7 +46,8 @@ if (argv.h || argv.help) {
|
|
|
46
46
|
'',
|
|
47
47
|
' -h --help Print this list and exit.',
|
|
48
48
|
' -v --version Print the version and exit.',
|
|
49
|
-
' -w --open Open API overview page automatically, default false.'
|
|
49
|
+
' -w --open Open API overview page automatically, default false.',
|
|
50
|
+
' -e --explorer Enable file explorer server, specify directory to browse, default [./].'
|
|
50
51
|
].join('\n')
|
|
51
52
|
);
|
|
52
53
|
process.exit();
|
|
@@ -62,6 +63,7 @@ var port = argv.p || argv.port,
|
|
|
62
63
|
isStartSocketServer = argv.S || false,
|
|
63
64
|
rewrite = argv.r || argv.rewrite || false,
|
|
64
65
|
isOpenApiOverview = argv.w || argv.open || false,
|
|
66
|
+
explorerDir = argv.e || argv.explorer,
|
|
65
67
|
log = null;
|
|
66
68
|
|
|
67
69
|
if (!argv.s && !argv.silent) {
|
|
@@ -95,6 +97,7 @@ injectEnvVariable('CORS_HEADERS', argv.H || argv['cors-headers']);
|
|
|
95
97
|
|
|
96
98
|
injectEnvVariable('WEB_PUBLIC_PATH', argv.b || argv['web-baseurl']);
|
|
97
99
|
injectEnvVariable('STATIC_DIRECTORY', argv.R || argv['static-server']);
|
|
100
|
+
injectEnvVariable('EXPLORER_DIRECTORY', explorerDir);
|
|
98
101
|
// injectEnvVariable('PROXY_OPTIONS', argv.O || argv['proxy-options']);
|
|
99
102
|
// 解析Web代理配置项(来源js|config文件或命令行参数字符串)
|
|
100
103
|
const proxyArg = argv.O || argv['proxy-options'];
|
|
@@ -204,11 +207,26 @@ function startStaticServer() {
|
|
|
204
207
|
stdio: 'inherit'
|
|
205
208
|
});
|
|
206
209
|
}
|
|
210
|
+
|
|
211
|
+
// Node子进程启动FileExplorerServer
|
|
212
|
+
function startFileExplorerServer() {
|
|
213
|
+
spawn(node, [resolve(__dirname, '../lib/fileExplorerServer.js')], {
|
|
214
|
+
stdio: 'inherit'
|
|
215
|
+
});
|
|
216
|
+
}
|
|
207
217
|
/**
|
|
208
218
|
* 初始化服务
|
|
209
219
|
*/
|
|
210
220
|
function initServe() {
|
|
211
|
-
if (
|
|
221
|
+
if (explorerDir) {
|
|
222
|
+
// 文件浏览器:指定目录
|
|
223
|
+
process.env.EXPLORER_DIRECTORY = resolve(process.cwd(), explorerDir);
|
|
224
|
+
if (!existsSync(process.env.EXPLORER_DIRECTORY)) {
|
|
225
|
+
console.error(`explorer: 目录 ${process.env.EXPLORER_DIRECTORY} 不存在`);
|
|
226
|
+
process.exit();
|
|
227
|
+
}
|
|
228
|
+
startFileExplorerServer();
|
|
229
|
+
} else if (specifiedFile) {
|
|
212
230
|
// Mock服务器:指定文件
|
|
213
231
|
process.env.SPECIFIED_FILE = resolve(process.cwd(), specifiedFile);
|
|
214
232
|
if (isStartSocketServer) {
|