mock-service-cli-ultra 4.4.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/LICENSE +21 -0
- package/README.md +307 -0
- package/bin/mock-service-cli +3 -0
- package/dist/api-overview.html +685 -0
- package/dist/asyncTaskQueue.js +1 -0
- package/dist/cli.js +1 -0
- package/dist/edition.json +1 -0
- package/dist/favicon-api-overview.svg +8 -0
- package/dist/favicon-file-explorer-login.svg +8 -0
- package/dist/favicon-file-explorer.svg +6 -0
- package/dist/favicon-static-server.svg +6 -0
- package/dist/file-explorer-login.html +60 -0
- package/dist/file-explorer.html +3003 -0
- package/dist/fileExplorerServer.js +1 -0
- package/dist/manageMockFiles.js +1 -0
- package/dist/meta.json +10001 -0
- package/dist/mockServer.js +1 -0
- package/dist/packageInfo.js +1 -0
- package/dist/runtime.js +156 -0
- package/dist/staticServer.js +1 -0
- package/dist/utils.js +1 -0
- package/docs/static-server.config.example.json +28 -0
- package/package.json +58 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2021-present, [chendq](https://github.com/chandq)
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
[](https://github.com/chandq/mock-service-cli/actions/workflows/release.yml)
|
|
2
|
+
[](https://coveralls.io/github/chandq/mock-service-cli?branch=master)
|
|
3
|
+
[](https://www.npmjs.com/package/mock-service-cli)
|
|
4
|
+
[](https://github.com/chandq/mock-service-cli/blob/master/LICENSE.md)
|
|
5
|
+
|
|
6
|
+
# 🦅 mock-service-cli
|
|
7
|
+
|
|
8
|
+
一个基于 Node.js 和 Express 的轻量级 Mock 套件命令行工具,提供本地开发调试所需的各种服务器功能。
|
|
9
|
+
|
|
10
|
+
## ✨ 核心功能
|
|
11
|
+
|
|
12
|
+
- **Mock Server** - 本地 Mock 服务器,支持热更新和多种请求方法
|
|
13
|
+
- **Static Server** - 静态资源服务器
|
|
14
|
+
- **SPA Server** - 单页应用服务器(模拟生产环境)
|
|
15
|
+
- **HTTP Proxy** - 本地接口代理服务
|
|
16
|
+
- **API Overview** - 现代化的 API 概览页面
|
|
17
|
+
- **File Explorer** - 现代化的文件浏览器
|
|
18
|
+
|
|
19
|
+
## 🚀 特性
|
|
20
|
+
|
|
21
|
+
- 📊 支持统计 mock 文件数量和请求数量
|
|
22
|
+
- 🔧 支持终端打开 mock 文件所在位置
|
|
23
|
+
- 🎨 自动生成和打开现代化的 API 概览页面
|
|
24
|
+
- 🌐 支持跨域配置
|
|
25
|
+
- 🔄 支持热更新(Mock 文件改动后自动重启)
|
|
26
|
+
- 📁 支持文件浏览器,可预览各种文件类型
|
|
27
|
+
- 💾 支持保存接口响应数据
|
|
28
|
+
- 🔗 支持 HTTP 请求代理
|
|
29
|
+
|
|
30
|
+
## 📦 安装
|
|
31
|
+
|
|
32
|
+
### 全局安装
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
npm install --global mock-service-cli
|
|
36
|
+
# 或
|
|
37
|
+
brew install mock-service-cli
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
需要 RAR、7z、bzip2、xz 等高级归档格式时,安装 Ultra 版。它与轻量版使用相同的命令,不能同时全局安装:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
npm install --global mock-service-cli-ultra
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### 局部安装
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
npm install mock-service-cli --save-dev
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### 直接运行
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
npx mock-service-cli [options] [path]
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## 🛠️ 命令行选项
|
|
59
|
+
|
|
60
|
+
| 选项 | 描述 | 默认值 |
|
|
61
|
+
| -------------------------- | ----------------------------------------------------------------- | ------ |
|
|
62
|
+
| `-h` 或 `--help` | 显示帮助信息 | - |
|
|
63
|
+
| `-p` 或 `--port` | Mock 服务器端口 | 8090 |
|
|
64
|
+
| `-d` | 指定 mock 目录 | ./mock |
|
|
65
|
+
| `-f` | 指定单个 mock 文件 | - |
|
|
66
|
+
| `-s` 或 `--silent` | 抑制日志输出 | - |
|
|
67
|
+
| `-v` 或 `--version` | 显示版本信息 | - |
|
|
68
|
+
| `-S` 或 `--socket-server` | 启动 socket 服务器,用于保存 API 响应数据 | false |
|
|
69
|
+
| `-a` 或 `--api-stat` | 打印 API URL 和文件路径信息 | false |
|
|
70
|
+
| `-t` 或 `--track` | 记录操作信息到文件 | false |
|
|
71
|
+
| `-o` 或 `--cors-origin` | 配置 CORS 允许的源,多个源用逗号分隔 | \* |
|
|
72
|
+
| `-O` 或 `--proxy-options` | 配置 HTTP 请求代理选项,支持 js 文件、json 文件或命令行参数 | - |
|
|
73
|
+
| `-r` 或 `--rewrite` | rewrite http or https request url prefix of proxy, default false. | false |
|
|
74
|
+
| `-H` 或 `--cors-headers` | 配置 CORS 头信息 | \* |
|
|
75
|
+
| `-A` 或 `--append-headers` | 添加响应头信息,多个头用逗号分隔 | - |
|
|
76
|
+
| `-D` 或 `--web-dir` | 启用 Web 服务器,指定 web 目录(SPA 应用) | - |
|
|
77
|
+
| `-P` 或 `--web-port` | Web 服务器端口 | 9090 |
|
|
78
|
+
| `-b` 或 `--web-baseurl` | 指定 SPA Web 服务器的公共路径 | - |
|
|
79
|
+
| `-R` 或 `--static-server` | 启用静态服务器,指定静态资源目录 | - |
|
|
80
|
+
| `--static-config <file>` | 静态服务器的 JSON 配置:热更新、HTTPS、挂载、代理与 SPA 回退 | - |
|
|
81
|
+
| `-w` 或 `--open` | 自动打开 API 概览页、文件浏览器页 | false |
|
|
82
|
+
| `-e` 或 `--explorer` | 启用文件浏览器服务器,指定要浏览的目录 | ./ |
|
|
83
|
+
| `--edit` | 启用文件浏览器的新建、重命名、删除和上传操作 | false |
|
|
84
|
+
| `--auth <password>` | 为文件浏览器启用密码认证(仅可搭配 `--explorer`) | - |
|
|
85
|
+
| `--host [allowlist-file]` | 暴露全部 IPv4 网卡;传入文件时仅允许白名单 IP 访问 | false |
|
|
86
|
+
|
|
87
|
+
## 📖 使用示例
|
|
88
|
+
|
|
89
|
+
### Mock 服务器
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
# 使用默认配置启动 Mock 服务器
|
|
93
|
+
mock-service-cli
|
|
94
|
+
|
|
95
|
+
# 指定端口和目录
|
|
96
|
+
mock-service-cli -p 8080 -d ./api
|
|
97
|
+
|
|
98
|
+
# 自动打开 API 概览页面
|
|
99
|
+
mock-service-cli --open
|
|
100
|
+
|
|
101
|
+
# 使用单个 Mock 文件
|
|
102
|
+
mock-service-cli -f ./mock.js
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### 静态服务器
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
# 启动静态服务器
|
|
109
|
+
mock-service-cli -R ./public
|
|
110
|
+
|
|
111
|
+
# 使用 Live Server 风格的热更新配置
|
|
112
|
+
mock-service-cli -R ./public --static-config ./static-server.json
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
静态服务器会监听资源变化并向 HTML 页面注入热更新客户端:CSS 文件更新时替换样式表,其余变更刷新页面。
|
|
116
|
+
默认不打开浏览器;在配置中设置 `"open": true` 或提供页面路径即可打开。完整配置字段和示例见
|
|
117
|
+
[`docs/static-server.config.example.json`](./docs/static-server.config.example.json):支持忽略规则、SPA 回退、挂载目录、代理、HTTPS、CORS、响应头和自定义浏览器命令。
|
|
118
|
+
`-p`、`--host`、`-A` 和 `--proxy-options` 仍可使用,且同名 CLI 配置优先。
|
|
119
|
+
未设置 `spaFallback` 时,根目录和子目录会显示可点击的目录索引,不会自动加载 `index.html`;用户可直接访问该文件。
|
|
120
|
+
只有显式设置 `"spaFallback": "/index.html"`(或其他入口)时,未命中的路由才会返回 SPA 入口页。
|
|
121
|
+
|
|
122
|
+
### Web 服务器 (SPA)
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
# 启动 SPA 服务器
|
|
126
|
+
mock-service-cli -D ./dist
|
|
127
|
+
|
|
128
|
+
# 指定公共路径和端口
|
|
129
|
+
mock-service-cli -D ./dist -b /app -P 9090
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### HTTP 代理
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
# 启动带代理的 Web 服务器
|
|
136
|
+
mock-service-cli -D ./ -O '/api|http://localhost:3000'
|
|
137
|
+
|
|
138
|
+
# 使用代理配置文件
|
|
139
|
+
mock-service-cli -D ./ -O ./proxy.js
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### 文件浏览器
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
# 浏览当前目录
|
|
146
|
+
mock-service-cli -e ./
|
|
147
|
+
|
|
148
|
+
# 浏览指定目录
|
|
149
|
+
mock-service-cli -e /path/to/directory
|
|
150
|
+
|
|
151
|
+
# 指定端口
|
|
152
|
+
mock-service-cli -e ./ -p 9090
|
|
153
|
+
|
|
154
|
+
# 启用文件编辑操作
|
|
155
|
+
mock-service-cli -e ./ --edit
|
|
156
|
+
|
|
157
|
+
# 启用文件浏览器密码认证
|
|
158
|
+
mock-service-cli -e ./ --auth 'local-password'
|
|
159
|
+
|
|
160
|
+
# 暴露到局域网(编辑操作仍需额外传入 --edit)
|
|
161
|
+
mock-service-cli -e ./ --host
|
|
162
|
+
|
|
163
|
+
# 仅向白名单 IP 暴露服务
|
|
164
|
+
mock-service-cli -e ./ --host ./allowed-ips.txt
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
默认情况下,Mock、SPA、Static 和 File Explorer 服务只监听 `127.0.0.1`。
|
|
168
|
+
`--host` 会使这些服务监听所有 IPv4 网卡,请仅在可信网络中使用。传入白名单文件时,服务仍监听全部 IPv4 网卡,
|
|
169
|
+
但仅允许 `localhost`、`127.0.0.1`、`::1` 及文件中的 IP/CIDR 访问;空行和行首 `#` 注释会忽略,非法或空白名单会阻止启动。
|
|
170
|
+
该规则同时作用于 Mock、SPA、Static、File Explorer 和 Socket 服务。
|
|
171
|
+
|
|
172
|
+
文件浏览器默认只读;必须在启动时传入 `--edit` 才能创建、重命名、删除或上传。上传文件支持多选,上传文件夹会保留目录层级;
|
|
173
|
+
同名路径不会覆盖,其他无冲突文件仍会继续上传。单文件和单次请求最大 2GB,单次最多 100 个文件;
|
|
174
|
+
文件夹上传会按最多 100 个文件且 1GB 自动分批,依次完成上传。大文件会先写入系统临时目录再复制到目标目录,
|
|
175
|
+
上传时请确保临时目录和目标磁盘合计至少有文件大小两倍的可用空间。
|
|
176
|
+
|
|
177
|
+
编辑模式下还可压缩选中项、预览压缩包目录和解压压缩包。轻量版创建压缩包支持 ZIP 和 TAR.GZ,预览和解压支持 ZIP、TAR 与 TAR.GZ;归档操作在后台执行,可取消;单个压缩包及解压后的总大小上限为 2GB,压缩包内最多 10,000 项,且会拒绝加密包、路径穿越、符号链接和目标冲突。
|
|
178
|
+
|
|
179
|
+
Ultra 版额外支持 RAR、7z、gzip、bzip2 与 xz 系列的预览和解压;RAR 为只读支持,不能创建。Ultra 包会额外安装约 12MB 的跨平台 7-Zip 二进制,RAR 通过只读解码器处理;轻量版不包含这些二进制。
|
|
180
|
+
|
|
181
|
+
`--auth` 会在文件浏览器中显示登录页,并在每次页面加载和每个 API 请求时验证密码。密码仅保存在当前浏览器标签页的
|
|
182
|
+
`sessionStorage` 中,但命令行参数仍可能暴露在 shell 历史和进程列表里,因此只适用于可信本机或局域网环境。
|
|
183
|
+
|
|
184
|
+
## 📝 编写 Mock 文件
|
|
185
|
+
|
|
186
|
+
Mock 文件支持 CommonJS 规范,不支持 ES Module。
|
|
187
|
+
|
|
188
|
+
```javascript
|
|
189
|
+
// mock/test.js
|
|
190
|
+
module.exports = {
|
|
191
|
+
// GET 可忽略
|
|
192
|
+
'/mock/api/test': { aa: 1, bb: '默认GET请求' },
|
|
193
|
+
'GET /mock/api/:id/test': { aa: 1, bb: '使用id占位符' },
|
|
194
|
+
'POST /mock/api/test': { aa: 1, bb: 'POST 方法' },
|
|
195
|
+
'DELETE /mock/api/test': { aa: 1, bb: 'DELETE 方法' },
|
|
196
|
+
// 支持自定义函数
|
|
197
|
+
'/mock/api/video/test': (req, res) => {
|
|
198
|
+
res.header('token', '5848778333359208');
|
|
199
|
+
res.json({ aa: 1, bb: 'asdf' });
|
|
200
|
+
}
|
|
201
|
+
};
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### 引入 Mock.js
|
|
205
|
+
|
|
206
|
+
可以使用 [Mock.js](http://mockjs.com/) 生成模拟数据:
|
|
207
|
+
|
|
208
|
+
```javascript
|
|
209
|
+
const mockjs = require('mockjs');
|
|
210
|
+
|
|
211
|
+
module.exports = {
|
|
212
|
+
'GET /api/tags': mockjs.mock({
|
|
213
|
+
'list|100': [
|
|
214
|
+
{
|
|
215
|
+
'NO|+1': 1,
|
|
216
|
+
city: '@city',
|
|
217
|
+
'value|1-100': 50
|
|
218
|
+
}
|
|
219
|
+
]
|
|
220
|
+
})
|
|
221
|
+
};
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
## 🎨 API 概览页面
|
|
225
|
+
|
|
226
|
+
现代化的 Web 界面,用于展示和测试所有已注册的 Mock API 接口。
|
|
227
|
+
|
|
228
|
+
### 功能特性
|
|
229
|
+
|
|
230
|
+
- 📁 按目录分类展示 API
|
|
231
|
+
- 🔍 支持搜索接口
|
|
232
|
+
- 🎯 每种 HTTP 方法使用不同颜色标签
|
|
233
|
+
- 🧪 支持直接在页面中测试 API
|
|
234
|
+
- 📋 响应数据格式化展示
|
|
235
|
+
|
|
236
|
+
### 访问方式
|
|
237
|
+
|
|
238
|
+
- **自动打开**:使用 `--open` 参数
|
|
239
|
+
- **手动访问**:`http://localhost:8090/__api-overview`
|
|
240
|
+
|
|
241
|
+
## 📁 文件浏览器
|
|
242
|
+
|
|
243
|
+
现代化的文件浏览界面,支持目录导航、文件预览和管理。
|
|
244
|
+
|
|
245
|
+
### 功能特性
|
|
246
|
+
|
|
247
|
+
- 📁 **目录导航**:面包屑导航,支持快速跳转
|
|
248
|
+
- 👁️ **文件预览**:
|
|
249
|
+
- 图片文件:直接预览(JPG、PNG、GIF、WebP 等)
|
|
250
|
+
- 文本文件:代码高亮预览(JS、JSON、HTML、CSS 等)
|
|
251
|
+
- 其他文件:提供下载
|
|
252
|
+
- 🎨 **图标标识**:不同文件类型使用不同颜色图标
|
|
253
|
+
- 📱 **视图切换**:网格视图和列表视图
|
|
254
|
+
- ⚡ **操作功能**:
|
|
255
|
+
- 在系统文件管理器中打开
|
|
256
|
+
- 复制文件路径
|
|
257
|
+
- 下载文件
|
|
258
|
+
- 刷新目录
|
|
259
|
+
- 显示/隐藏隐藏文件
|
|
260
|
+
- 🔍 **搜索**:支持文件名模糊搜索
|
|
261
|
+
- 📊 **排序**:按名称、时间、大小排序
|
|
262
|
+
- ⌨️ **键盘快捷键**:
|
|
263
|
+
- `Escape`:关闭预览
|
|
264
|
+
- `Backspace`:返回上级
|
|
265
|
+
|
|
266
|
+
### 界面预览
|
|
267
|
+
|
|
268
|
+
- 渐变紫色现代化设计
|
|
269
|
+
- 响应式布局
|
|
270
|
+
- 流畅的交互体验
|
|
271
|
+
|
|
272
|
+
## 🔧 高级功能
|
|
273
|
+
|
|
274
|
+
### 保存接口响应数据
|
|
275
|
+
|
|
276
|
+
使用 Socket.io 保存接口响应数据,用于后续 Mock:
|
|
277
|
+
|
|
278
|
+
```javascript
|
|
279
|
+
import { io } from 'socket.io-client';
|
|
280
|
+
|
|
281
|
+
const socket = io.connect('http://localhost:8090/mock-data', {
|
|
282
|
+
transports: ['websocket'],
|
|
283
|
+
path: '/ws/mock-service'
|
|
284
|
+
});
|
|
285
|
+
|
|
286
|
+
// 保存接口数据
|
|
287
|
+
socket.emit('save-data', { url, method, data, dir });
|
|
288
|
+
|
|
289
|
+
// 获取目录统计信息
|
|
290
|
+
socket.emit('mock-dir-stat', dirPath);
|
|
291
|
+
socket.on('mock-dir-stat', data => {
|
|
292
|
+
console.log('统计信息:', data);
|
|
293
|
+
});
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
## 📚 文档
|
|
297
|
+
|
|
298
|
+
- [GitHub 仓库](https://github.com/chandq/mock-service-cli)
|
|
299
|
+
- [npm 包](https://www.npmjs.com/package/mock-service-cli)
|
|
300
|
+
|
|
301
|
+
## 🤝 贡献
|
|
302
|
+
|
|
303
|
+
欢迎提交 Issue 和 Pull Request!
|
|
304
|
+
|
|
305
|
+
## 📄 许可证
|
|
306
|
+
|
|
307
|
+
MIT License - 详见 [LICENSE.md](LICENSE.md)
|