mock-service-cli 3.4.0 → 3.5.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 CHANGED
@@ -4,324 +4,241 @@
4
4
  [![node](https://img.shields.io/badge/language-node-orange.svg)](https://nodejs.org/download/release/v12.0.0/)
5
5
  [![license:MIT](https://img.shields.io/npm/l/vue.svg?sanitize=true)](https://github.com/chandq/mock-service-cli/blob/master/LICENSE.md)
6
6
 
7
- <!-- [![Downloads:?](https://img.shields.io/npm/dm/mock-service-cli.svg?sanitize=true)](https://npmcharts.com/compare/mock-service-cli?minimal=true) -->
7
+ # 🦅 mock-service-cli
8
8
 
9
- # 🦅 一个基于 [node](https://nodejs.org/en/)[express](https://www.expressjs.com.cn/) 轻量级 Mock 套件 命令行工具
9
+ 一个基于 Node.jsExpress 的轻量级 Mock 套件命令行工具,提供本地开发调试所需的各种服务器功能。
10
10
 
11
- ### 简介
11
+ ## ✨ 核心功能
12
12
 
13
- 内置 **Static Server**、**Mock Server**、**SPA Server**、Http?s request proxy、API overview page 等功能集。
13
+ - **Mock Server** - 本地 Mock 服务器,支持热更新和多种请求方法
14
+ - **Static Server** - 静态资源服务器
15
+ - **SPA Server** - 单页应用服务器(模拟生产环境)
16
+ - **HTTP Proxy** - 本地接口代理服务
17
+ - **API Overview** - 现代化的 API 概览页面
18
+ - **File Explorer** - 现代化的文件浏览器
14
19
 
15
- **简易轻量**、**B/S 架构**、**0 秒启动**的本地命令行 Mock 服务套件, 支持热更新,对于开发调试 mock 数据很实用,能提高前端开发者的开发效率。支持 `GET`,`POST`,`PUT`,`DELETE`,`PATCH`,`OPTIONS`,`COPY`,`LINK`,`UNLINK`,`PURGE` 等常用请求类型,无需布署后端,可能是本地最好用的 Mock 工具之一。
20
+ ## 🚀 特性
16
21
 
17
- 特性功能:
22
+ - 📊 支持统计 mock 文件数量和请求数量
23
+ - 🔧 支持终端打开 mock 文件所在位置
24
+ - 🎨 自动生成和打开现代化的 API 概览页面
25
+ - 🌐 支持跨域配置
26
+ - 🔄 支持热更新(Mock 文件改动后自动重启)
27
+ - 📁 支持文件浏览器,可预览各种文件类型
28
+ - 💾 支持保存接口响应数据
29
+ - 🔗 支持 HTTP 请求代理
18
30
 
19
- - 支持统计 mock 的文件数量和 mock 请求数量
20
- - 支持终端打开 mock 文件的所在位置
21
- - 支持自动生成和打开现代化的 API 概览页面(按目录分类、可折叠展开、可点击测试 API)
31
+ ## 📦 安装
22
32
 
23
- #### Static Server (和 Mock Server 互斥使用)
24
-
25
- 简易的静态资源服务器,可用于开发调试,如需更多使用场景,请选择 [http-server](https://www.npmjs.com/package/http-server)
26
-
27
- #### Mock Server - 本地 Mock 服务器
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
- - cli arguments string
40
+ ### 局部安装
41
+ ```bash
42
+ npm install mock-service-cli --save-dev
43
+ ```
139
44
 
140
- `mock-service-cli -D ./ -O '/api/apaas|http://192.168.0.105:60700,/api/permission|http://192.168.0.105:60700'`
45
+ ### 直接运行
46
+ ```bash
47
+ npx mock-service-cli [options] [path]
48
+ ```
141
49
 
142
- - js file
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
- `mock-service-cli -D ./ -O ./proxy.js`
91
+ ### 静态服务器
92
+ ```bash
93
+ # 启动静态服务器
94
+ mock-service-cli -R ./public
95
+ ```
145
96
 
146
- proxy.js file content as follows:
97
+ ### Web 服务器 (SPA)
98
+ ```bash
99
+ # 启动 SPA 服务器
100
+ mock-service-cli -D ./dist
147
101
 
148
- ```js
149
- module.exports = {
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
- 10. Start Mock Server and automatically open API overview page.
106
+ ### HTTP 代理
107
+ ```bash
108
+ # 启动带代理的 Web 服务器
109
+ mock-service-cli -D ./ -O '/api|http://localhost:3000'
156
110
 
157
- `mock-service-cli --open`
111
+ # 使用代理配置文件
112
+ mock-service-cli -D ./ -O ./proxy.js
113
+ ```
158
114
 
159
- 11. Start Mock Server with custom port and automatically open API overview page.
115
+ ### 文件浏览器
116
+ ```bash
117
+ # 浏览当前目录
118
+ mock-service-cli -e ./
160
119
 
161
- `mock-service-cli -p 8080 --open`
120
+ # 浏览指定目录
121
+ mock-service-cli -e /path/to/directory
162
122
 
163
- ### 编写 Mock 文件
123
+ # 指定端口
124
+ mock-service-cli -e ./ -p 9090
125
+ ```
164
126
 
165
- > mock 请求的类型支持`GET`,`POST`,`PUT`,`DELETE`,`PATCH`,`OPTIONS`,`COPY`,`LINK`,`UNLINK`,`PURGE`
127
+ ## 📝 编写 Mock 文件
166
128
 
167
- 如果 `./mock/test.js` 的内容如下,
129
+ Mock 文件支持 CommonJS 规范,不支持 ES Module。
168
130
 
169
131
  ```javascript
132
+ // mock/test.js
170
133
  module.exports = {
171
134
  // GET 可忽略
172
- '/mock/mock/api/test': { aa: 1, bb: '默认GET请求' },
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
- 'PUT /mock/api/test': { aa: 1, bb: 'PUT 方法' },
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
- ![Mock Server](/assets/mock-server.jpg)
196
-
197
147
  ### 引入 Mock.js
198
148
 
199
- [Mock.js](http://mockjs.com/) 是常用的辅助生成模拟数据的三方库,借助他可以提升我们的 mock 数据能力。
200
-
201
- 比如:
149
+ 可以使用 [Mock.js](http://mockjs.com/) 生成模拟数据:
202
150
 
203
- ```js
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
- 'NO|+1': 1,
212
- city: '@city',
213
- maintainType: '@cname(3, 5)',
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
- ### 启动 Web Server, 在本地像 nginx 一样运行 dist 文件对应的 SPA
226
-
227
- ![Web Server](/assets/web-server.jpg)
228
-
229
- ### 启动 Web Server, 启用 Proxy
165
+ ## 🎨 API 概览页面
230
166
 
231
- ![Web Server Proxy](/assets/web-server-proxy.jpg)
167
+ 现代化的 Web 界面,用于展示和测试所有已注册的 Mock API 接口。
232
168
 
233
- ### API 概览页面
169
+ ### 功能特性
170
+ - 📁 按目录分类展示 API
171
+ - 🔍 支持搜索接口
172
+ - 🎯 每种 HTTP 方法使用不同颜色标签
173
+ - 🧪 支持直接在页面中测试 API
174
+ - 📋 响应数据格式化展示
234
175
 
235
- API 概览页面是一个现代化的 Web 界面,用于展示和测试所有已注册的 Mock API 接口。
176
+ ### 访问方式
177
+ - **自动打开**:使用 `--open` 参数
178
+ - **手动访问**:`http://localhost:8090/__api-overview`
236
179
 
237
- #### 功能特性
180
+ ## 📁 文件浏览器
238
181
 
239
- - 按目录分类展示 API 接口
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
- 1. **自动打开**:使用 `--open` 参数启动服务时,会自动在浏览器中打开 API 概览页面
204
+ ### 界面预览
205
+ - 渐变紫色现代化设计
206
+ - 响应式布局
207
+ - 流畅的交互体验
250
208
 
251
- ```bash
252
- mock-service-cli --open
253
- ```
209
+ ## 🔧 高级功能
254
210
 
255
- 2. **手动访问**:在浏览器中访问以下地址
256
- ```
257
- http://localhost:8090/__api-overview
258
- ```
211
+ ### 保存接口响应数据
259
212
 
260
- #### 页面预览
213
+ 使用 Socket.io 保存接口响应数据,用于后续 Mock:
261
214
 
262
- API 概览页面采用现代化的响应式设计,包含以下部分:
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://{MockServerIP}:{PORT}/mock-data', {
218
+ const socket = io.connect('http://localhost:8090/mock-data', {
278
219
  transports: ['websocket'],
279
220
  path: '/ws/mock-service'
280
221
  });
281
- // 向SocketServer发消息:保存接口数据
222
+
223
+ // 保存接口数据
282
224
  socket.emit('save-data', { url, method, data, dir });
283
- // 向SocketServer发消息:获取指定目录的Mock统计信息
225
+
226
+ // 获取目录统计信息
284
227
  socket.emit('mock-dir-stat', dirPath);
285
- // 监听SocketServer消息:获取指定目录的Mock统计信息
286
- socket.on('mock-dir-stat', function (mockDirStat) {});
287
- // 向SocketServer发消息:获取指定文件的Mock统计信息
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
- axios.js 文件中完成保存所有接口响应数据、根据 Mock 数据池自动 Mock 的操作, 示例如下:
233
+ ## 📚 文档
294
234
 
295
- ```js
296
- import { io } from 'socket.io-client';
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
- const socket = io.connect('http://192.168.31.54:8090/mock-data', {
300
- transports: ['websocket'],
301
- path: '/ws/mock-service',
302
- query: {
303
- token: 'yyds'
304
- }
305
- });
238
+ ## 🤝 贡献
306
239
 
307
- socket.emit('mock-dir-stat', '/home/chen/projects/model-ui/mock');
308
- socket.on('mock-dir-stat', function (data) {
309
- console.debug('mock-dir-stat:', data);
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)
@@ -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 (specifiedFile) {
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) {