mock-service-cli 3.3.6 → 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
@@ -1,280 +1,244 @@
1
1
  [![Node.js CI](https://github.com/chandq/mock-service-cli/actions/workflows/node.js.yml/badge.svg)](https://github.com/chandq/mock-service-cli/actions/workflows/node.js.yml)
2
2
  [![Coverage Status](https://coveralls.io/repos/github/chandq/mock-service-cli/badge.svg?branch=master)](https://coveralls.io/github/chandq/mock-service-cli?branch=master)
3
- [![mock-service-cli](https://img.shields.io/github/package-json/v/chandq/mock-service-cli?style=flat-square)](https://github.com/chandq/mock-service-cli)
3
+ [![mock-service-cli](https://img.shields.io/github/package-json/v/chandq/mock-service-cli?style=flat-square)](https://www.npmjs.com/package/mock-service-cli)
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
- [![Downloads:?](https://img.shields.io/npm/dm/mock-service-cli.svg?sanitize=true)](https://npmcharts.com/compare/mock-service-cli?minimal=true)
7
6
 
8
- # 🦅 一个基于 [node](https://nodejs.org/en/) 和 [express](https://www.expressjs.com.cn/) 的 轻量级 Mock 套件 命令行工具
7
+ # 🦅 mock-service-cli
9
8
 
10
- ### 简介
9
+ 一个基于 Node.js 和 Express 的轻量级 Mock 套件命令行工具,提供本地开发调试所需的各种服务器功能。
11
10
 
12
- 内置 **Static Server**、**Mock Server**、**SPA Server**、Http?s request proxy 等功能集。
11
+ ## 核心功能
13
12
 
14
- **简易轻量**、**B/S 架构**、**0 秒启动**的本地命令行 Mock 服务套件, 支持热更新,对于开发调试 mock 数据很实用,能提高前端开发者的开发效率。支持 `GET`,`POST`,`PUT`,`DELETE`,`PATCH`,`OPTIONS`,`COPY`,`LINK`,`UNLINK`,`PURGE` 等常用请求类型,无需布署后端,可能是本地最好用的 Mock 工具之一。
13
+ - **Mock Server** - 本地 Mock 服务器,支持热更新和多种请求方法
14
+ - **Static Server** - 静态资源服务器
15
+ - **SPA Server** - 单页应用服务器(模拟生产环境)
16
+ - **HTTP Proxy** - 本地接口代理服务
17
+ - **API Overview** - 现代化的 API 概览页面
18
+ - **File Explorer** - 现代化的文件浏览器
15
19
 
16
- 特性功能:
20
+ ## 🚀 特性
17
21
 
18
- - 支持统计 mock 的文件数量和 mock 请求数量
19
- - 支持终端打开 mock 文件的所在位置
22
+ - 📊 支持统计 mock 文件数量和请求数量
23
+ - 🔧 支持终端打开 mock 文件所在位置
24
+ - 🎨 自动生成和打开现代化的 API 概览页面
25
+ - 🌐 支持跨域配置
26
+ - 🔄 支持热更新(Mock 文件改动后自动重启)
27
+ - 📁 支持文件浏览器,可预览各种文件类型
28
+ - 💾 支持保存接口响应数据
29
+ - 🔗 支持 HTTP 请求代理
20
30
 
21
- #### Static Server (和 Mock Server 互斥使用)
31
+ ## 📦 安装
22
32
 
23
- 简易的静态资源服务器,可用于开发调试,如需更多使用场景,请选择 [http-server](https://www.npmjs.com/package/http-server)
24
-
25
- #### Mock Server - 本地 Mock 服务器
26
-
27
- **支持热更新,即 Mock 文件改动后自动重启服务**
28
-
29
- > Mock File 仅支持 commonjs 规范的 js、cjs 文件,不支持 ES Module
30
-
31
- 支持以下常见业务场景:
32
-
33
- - [x] 无服务端演示项目的数据 Mock
34
- - [x] 业务开发接口联调前的数据 Mock
35
- - [x] 保留业务项目的所有或部分接口的响应数据(写入文件)
36
- - [x] 保障前端开发调试不受后端服务影响(当后端服务挂掉或部分接口响应异常时启用 Mock)
37
-
38
- #### Web Server - SPA Web 服务器
39
-
40
- 对 React、Vue 等单页应用项目构建生成的 dist 目录,启动本地 web 服务器(相当于使用本地安装的 nginx 服务)来模拟运行生产环境下的 web 服务
41
-
42
- #### Http request proxy - 基于浏览器的本地代理服务
43
-
44
- 实现了本地接口代理的能力,一般接口测试工具无法查看到 request 和 response 中 headers 的更多详情,这里实现了接口代理功能,在 Network 中可查看接口调用的详细信息。
45
-
46
- > 两种应用场景
47
-
48
- - 项目 dev 模式下的接口代理请求
49
- - Chrome 的 Console 执行 fetch 请求(用于接口测试)
50
-
51
- ## Installation:
52
-
53
- #### Running on-demand:
54
-
55
- Using `npx` you can run the script without installing it first:
56
-
57
- npx mock-service-cli [path] [options]
58
-
59
- #### Globally via `npm`
60
-
61
- npm install --global mock-service-cli
62
-
63
- This will install `mock-service-cli` globally so that it may be run from the command line anywhere.
64
-
65
- #### Globally via Homebrew
66
-
67
- brew install mock-service-cli
68
-
69
- #### As a dependency in your `npm` package:
70
-
71
- npm install mock-service-cli
72
-
73
- ## Usage:
74
-
75
- mock-service-cli [options] [path]
76
-
77
- `[path]` defaults to `./mock` .
78
-
79
- | Command | Description | Defaults |
80
- | -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- |
81
- | `-h` or `--help` | Print this list and exit. | |
82
- | `-p` or `--port` | Mock server port to use. Use `-p 8090` to look for an open port, starting at 8090. | 8090 |
83
- | `-d` | Specify mock directory | ./mock |
84
- | `-f` | Specify mock file | |
85
- | `-s` or `--silent` | Suppress log messages from output | |
86
- | `-v` or `--version` | Print the version and exit. | |
87
- | `-S` or `--socket-server` | Start socket server which used to save api response data for future mock. | false |
88
- | `-a` or `--api-stat` | Whether print api url and file path info or not, default false. | false |
89
- | `-t` or `--track` | Whether record operation info by write file, default false. | false |
90
- | `-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` | \* |
91
- | `-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. | - |
92
- | `-H` or `--cors-headers` | When start Mock Server, optionally provide CORS headers list separated by commas. default . | \* |
93
- | `-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. | - |
94
- | `-P` or `--web-port` | Web server port to use. Use `-P 9090` to look for an open port, starting at 9090. | 9090 |
95
- | `-b` or `--web-baseurl` | Specify public path of the SPA web server, can be base address of SPA route. | - |
96
- | `-R` or `--static-server` | Specify directory of the Static Web Server. | - |
97
-
98
- ## Example
99
-
100
- 1. Specify static resource file directory to startup Static Server.
101
-
102
- `mock-service-cli -R ./test`
103
-
104
- 2. Specify mock server port.
105
-
106
- `mock-service-cli -p 8085`
107
-
108
- 3. Enable cors of mock server, specify the origin and headers of http request.
109
-
110
- `mock-service-cli -o "http://192.168.0.8:38200,http://10.30.30.3" -H "custom-header"`
111
-
112
- 4. Specify mock directory to startup Mock Server.
113
-
114
- `mock-service-cli -d ./mock`
115
-
116
- 5. Specify mock file to startup Mock Server.
117
-
118
- `mock-service-cli -f ./mock/test.js`
119
-
120
- 6. Start socket server for used to save api response data.
121
-
122
- `mock-service-cli -S`
33
+ ### 全局安装
34
+ ```bash
35
+ npm install --global mock-service-cli
36
+ # 或
37
+ brew install mock-service-cli
38
+ ```
123
39
 
124
- 7. Only Used as api server for test on browser console or api request tools.
125
- > must specified server directory which can be empty but not includes index.html file, and also need config API proxy.
40
+ ### 局部安装
41
+ ```bash
42
+ npm install mock-service-cli --save-dev
43
+ ```
126
44
 
127
- `mock-service-cli -D server -O '/api/apaas|http://192.168.0.105:60700'`
45
+ ### 直接运行
46
+ ```bash
47
+ npx mock-service-cli [options] [path]
48
+ ```
128
49
 
129
- 8. Start static web server for SPA, and optionally specify public path and port.
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
+ ```
130
90
 
131
- `mock-service-cli -D ../react-best-practice/dist [-b '/redbridge/'] [-P 9090]`
91
+ ### 静态服务器
92
+ ```bash
93
+ # 启动静态服务器
94
+ mock-service-cli -R ./public
95
+ ```
132
96
 
133
- 9. Enable Proxy base on above item 7. support accept js file、json file、cli arguments string
97
+ ### Web 服务器 (SPA)
98
+ ```bash
99
+ # 启动 SPA 服务器
100
+ mock-service-cli -D ./dist
134
101
 
135
- - cli arguments string
102
+ # 指定公共路径和端口
103
+ mock-service-cli -D ./dist -b /app -P 9090
104
+ ```
136
105
 
137
- `mock-service-cli -D ./ -O '/api/apaas|http://192.168.0.105:60700,/api/permission|http://192.168.0.105:60700'`
106
+ ### HTTP 代理
107
+ ```bash
108
+ # 启动带代理的 Web 服务器
109
+ mock-service-cli -D ./ -O '/api|http://localhost:3000'
138
110
 
139
- - js file
111
+ # 使用代理配置文件
112
+ mock-service-cli -D ./ -O ./proxy.js
113
+ ```
140
114
 
141
- `mock-service-cli -D ./ -O ./proxy.js`
115
+ ### 文件浏览器
116
+ ```bash
117
+ # 浏览当前目录
118
+ mock-service-cli -e ./
142
119
 
143
- proxy.js file content as follows:
120
+ # 浏览指定目录
121
+ mock-service-cli -e /path/to/directory
144
122
 
145
- ```js
146
- module.exports = {
147
- '/api/apaas': 'http://192.168.0.105:60700',
148
- '/api/permission': 'http://192.168.0.105:60700'
149
- };
123
+ # 指定端口
124
+ mock-service-cli -e ./ -p 9090
150
125
  ```
151
126
 
152
- ### 编写 Mock 文件
153
-
154
- > mock 请求的类型支持`GET`,`POST`,`PUT`,`DELETE`,`PATCH`,`OPTIONS`,`COPY`,`LINK`,`UNLINK`,`PURGE`
127
+ ## 📝 编写 Mock 文件
155
128
 
156
- 如果 `./mock/test.js` 的内容如下,
129
+ Mock 文件支持 CommonJS 规范,不支持 ES Module。
157
130
 
158
131
  ```javascript
132
+ // mock/test.js
159
133
  module.exports = {
160
134
  // GET 可忽略
161
- '/mock/mock/api/test': { aa: 1, bb: '默认GET请求' },
135
+ '/mock/api/test': { aa: 1, bb: '默认GET请求' },
162
136
  'GET /mock/api/:id/test': { aa: 1, bb: '使用id占位符' },
163
- 'GET /mock/api/test1': { aa: 1, bb: '指定GET 方法' },
164
137
  'POST /mock/api/test': { aa: 1, bb: 'POST 方法' },
165
138
  'DELETE /mock/api/test': { aa: 1, bb: 'DELETE 方法' },
166
- 'PUT /mock/api/test': { aa: 1, bb: 'PUT 方法' },
167
- 'PATCH /mock/api/test': { aa: 1, bb: 'PATCH 方法' },
168
- 'OPTIONS /mock/api/test': { aa: 1, bb: 'OPTIONS 方法' },
169
- 'COPY /mock/api/test': { aa: 1, bb: 'COPY 方法' },
170
- 'LINK /mock/api/test': { aa: 1, bb: 'LINK 方法' },
171
- 'UNLINK /mock/api/test': { aa: 1, bb: 'UNLINK 方法' },
172
- 'PURGE /mock/api/test': { aa: 1, bb: 'PURGE 方法' },
173
- // 支持自定义函数,API 参考 express@4
139
+ // 支持自定义函数
174
140
  '/mock/api/video/test': (req, res) => {
175
- // 添加特定请求头token
176
141
  res.header('token', '5848778333359208');
177
142
  res.json({ aa: 1, bb: 'asdf' });
178
143
  }
179
144
  };
180
145
  ```
181
146
 
182
- 然后访问 `本地代理地址` + `/mock/api/222/test` (例如`http://127.0.0.1:8090/mock/api/222/test`) 就能得到 { aa: 1, bb: '使用 id 占位符' } 的响应,其他以此类推。
183
-
184
- ![Mock Server](/assets/mock-server.jpg)
185
-
186
147
  ### 引入 Mock.js
187
148
 
188
- [Mock.js](http://mockjs.com/) 是常用的辅助生成模拟数据的三方库,借助他可以提升我们的 mock 数据能力。
149
+ 可以使用 [Mock.js](http://mockjs.com/) 生成模拟数据:
189
150
 
190
- 比如:
191
-
192
- ```js
151
+ ```javascript
193
152
  const mockjs = require('mockjs');
194
153
 
195
154
  module.exports = {
196
- // 使用 mockjs 等三方库
197
155
  'GET /api/tags': mockjs.mock({
198
- 'list|100': [
199
- {
200
- 'NO|+1': 1,
201
- city: '@city',
202
- maintainType: '@cname(3, 5)',
203
- urgentType: '@cword(3, 5)',
204
- 'isCrash|1': 'true',
205
- createTime: '@date',
206
- 'value|1-100': 50,
207
- 'type|0-2': 1
208
- }
209
- ]
156
+ 'list|100': [{
157
+ 'NO|+1': 1,
158
+ city: '@city',
159
+ 'value|1-100': 50
160
+ }]
210
161
  })
211
162
  };
212
163
  ```
213
164
 
214
- ### 启动 Web Server, 在本地像 nginx 一样运行 dist 文件对应的 SPA
165
+ ## 🎨 API 概览页面
166
+
167
+ 现代化的 Web 界面,用于展示和测试所有已注册的 Mock API 接口。
168
+
169
+ ### 功能特性
170
+ - 📁 按目录分类展示 API
171
+ - 🔍 支持搜索接口
172
+ - 🎯 每种 HTTP 方法使用不同颜色标签
173
+ - 🧪 支持直接在页面中测试 API
174
+ - 📋 响应数据格式化展示
215
175
 
216
- ![Web Server](/assets/web-server.jpg)
176
+ ### 访问方式
177
+ - **自动打开**:使用 `--open` 参数
178
+ - **手动访问**:`http://localhost:8090/__api-overview`
217
179
 
218
- ### 启动 Web Server, 启用 Proxy
180
+ ## 📁 文件浏览器
219
181
 
220
- ![Web Server Proxy](/assets/web-server-proxy.jpg)
182
+ 现代化的文件浏览界面,支持目录导航、文件预览和管理。
221
183
 
222
- ### 借助 socket.io 保留接口数据
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`:返回上级
223
203
 
224
- > `save-data` 和 `mock-dir-stat` 事件会自动生成 `mock-list.json` 文件(维护接口`<url, [method]>`的关系映射),方便查阅接口统计信息
204
+ ### 界面预览
205
+ - 渐变紫色现代化设计
206
+ - 响应式布局
207
+ - 流畅的交互体验
225
208
 
226
- ```js
227
- // 连接SocketServer
209
+ ## 🔧 高级功能
210
+
211
+ ### 保存接口响应数据
212
+
213
+ 使用 Socket.io 保存接口响应数据,用于后续 Mock:
214
+
215
+ ```javascript
228
216
  import { io } from 'socket.io-client';
229
217
 
230
- const socket = io.connect('http://{MockServerIP}:{PORT}/mock-data', {
218
+ const socket = io.connect('http://localhost:8090/mock-data', {
231
219
  transports: ['websocket'],
232
220
  path: '/ws/mock-service'
233
221
  });
234
- // 向SocketServer发消息:保存接口数据
222
+
223
+ // 保存接口数据
235
224
  socket.emit('save-data', { url, method, data, dir });
236
- // 向SocketServer发消息:获取指定目录的Mock统计信息
225
+
226
+ // 获取目录统计信息
237
227
  socket.emit('mock-dir-stat', dirPath);
238
- // 监听SocketServer消息:获取指定目录的Mock统计信息
239
- socket.on('mock-dir-stat', function (mockDirStat) {});
240
- // 向SocketServer发消息:获取指定文件的Mock统计信息
241
- socket.emit('mock-file-stat', filePath);
242
- // 监听SocketServer消息:获取指定文件的Mock统计信息
243
- socket.on('mock-file-stat', function (mockFileStat) {});
228
+ socket.on('mock-dir-stat', (data) => {
229
+ console.log('统计信息:', data);
230
+ });
244
231
  ```
245
232
 
246
- axios.js 文件中完成保存所有接口响应数据、根据 Mock 数据池自动 Mock 的操作, 示例如下:
233
+ ## 📚 文档
247
234
 
248
- ```js
249
- import { io } from 'socket.io-client';
250
- import axios from 'axios';
235
+ - [GitHub 仓库](https://github.com/chandq/mock-service-cli)
236
+ - [npm 包](https://www.npmjs.com/package/mock-service-cli)
251
237
 
252
- const socket = io.connect('http://192.168.31.54:8090/mock-data', {
253
- transports: ['websocket'],
254
- path: '/ws/mock-service',
255
- query: {
256
- token: 'yyds'
257
- }
258
- });
238
+ ## 🤝 贡献
259
239
 
260
- socket.emit('mock-dir-stat', '/home/chen/projects/model-ui/mock');
261
- socket.on('mock-dir-stat', function (data) {
262
- console.debug('mock-dir-stat:', data);
263
- });
264
- // 保存所有接口响应数据(也可过滤部分接口)
265
- axios.interceptors.response.use(res => {
266
- const {
267
- config: { method, url },
268
- data
269
- } = res;
270
- socket.emit('save-data', { url, method, data, dir: '/home/chen/projects/model-ui/mock' });
271
- return res;
272
- });
273
- // 根据Mock数据池自动Mock(也可根据实际场景决定是否Mock)
274
- axios.interceptors.request.use(config => {
275
- if (Object.keys(mockObj).includes(`${config.method} ${config.url}`)) {
276
- config.baseURL = 'http://localhost:8090';
277
- }
278
- return config;
279
- });
280
- ```
240
+ 欢迎提交 Issue 和 Pull Request!
241
+
242
+ ## 📄 许可证
243
+
244
+ MIT License - 详见 [LICENSE.md](LICENSE.md)
@@ -45,7 +45,9 @@ if (argv.h || argv.help) {
45
45
  ' -R --static-server Specify static resource file directory when enabled static server.',
46
46
  '',
47
47
  ' -h --help Print this list and exit.',
48
- ' -v --version Print the version and exit.'
48
+ ' -v --version Print the version and exit.',
49
+ ' -w --open Open API overview page automatically, default false.',
50
+ ' -e --explorer Enable file explorer server, specify directory to browse, default [./].'
49
51
  ].join('\n')
50
52
  );
51
53
  process.exit();
@@ -60,6 +62,8 @@ var port = argv.p || argv.port,
60
62
  version = argv.v || argv.version,
61
63
  isStartSocketServer = argv.S || false,
62
64
  rewrite = argv.r || argv.rewrite || false,
65
+ isOpenApiOverview = argv.w || argv.open || false,
66
+ explorerDir = argv.e || argv.explorer,
63
67
  log = null;
64
68
 
65
69
  if (!argv.s && !argv.silent) {
@@ -79,6 +83,10 @@ if (isStartSocketServer) {
79
83
  process.env.SOCKET_SERVER = true;
80
84
  }
81
85
 
86
+ if (isOpenApiOverview) {
87
+ process.env.OPEN_API_OVERVIEW = true;
88
+ }
89
+
82
90
  if (version) {
83
91
  log.info('v' + require('../package.json').version);
84
92
  process.exit();
@@ -89,6 +97,7 @@ injectEnvVariable('CORS_HEADERS', argv.H || argv['cors-headers']);
89
97
 
90
98
  injectEnvVariable('WEB_PUBLIC_PATH', argv.b || argv['web-baseurl']);
91
99
  injectEnvVariable('STATIC_DIRECTORY', argv.R || argv['static-server']);
100
+ injectEnvVariable('EXPLORER_DIRECTORY', explorerDir);
92
101
  // injectEnvVariable('PROXY_OPTIONS', argv.O || argv['proxy-options']);
93
102
  // 解析Web代理配置项(来源js|config文件或命令行参数字符串)
94
103
  const proxyArg = argv.O || argv['proxy-options'];
@@ -198,11 +207,26 @@ function startStaticServer() {
198
207
  stdio: 'inherit'
199
208
  });
200
209
  }
210
+
211
+ // Node子进程启动FileExplorerServer
212
+ function startFileExplorerServer() {
213
+ spawn(node, [resolve(__dirname, '../lib/fileExplorerServer.js')], {
214
+ stdio: 'inherit'
215
+ });
216
+ }
201
217
  /**
202
218
  * 初始化服务
203
219
  */
204
220
  function initServe() {
205
- 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) {
206
230
  // Mock服务器:指定文件
207
231
  process.env.SPECIFIED_FILE = resolve(process.cwd(), specifiedFile);
208
232
  if (isStartSocketServer) {