mock-switch-webpack-plugin 1.2.0 → 1.3.1

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.
Files changed (2) hide show
  1. package/README.md +87 -174
  2. package/package.json +2 -1
package/README.md CHANGED
@@ -1,82 +1,47 @@
1
- # Mock Switch Webpack Plugin README
1
+ <div align="center">
2
2
 
3
+ [![npm version](https://img.shields.io/npm/v/mock-switch-webpack-plugin)](https://www.npmjs.com/package/mock-switch-webpack-plugin)
4
+ ![License](https://img.shields.io/badge/license-MIT-yellow.svg)
3
5
 
6
+ **基于 webpack 的开发环境 API Mock 与代理管理插件**
4
7
 
5
- **前端开发环境 API Mock 与代理管理插件**
8
+ </div>
6
9
 
7
- 一键切换 Mock / 开发 / 生产环境,Mock 数据热更新,无需重启服务
10
+ 在前端开发中,频繁切换接口环境(Mock/开发/生产)往往需要修改代码或重启服务。本插件通过 Webpack 与中间件技术,实现了一键可视化环境切换,让开发调试变得前所未有的流畅与高效。
8
11
 
9
- \[特性\]\(\#\-核心特性\) • \[安装\]\(\#\-安装\) • \[快速开始\]\(\#\-快速开始\) • \[配置说明\]\(\#\-配置说明\) • \[Mock 规范\]\(\#\-mock\-文件规范\)
12
+ ## 核心特性
10
13
 
14
+ - **浏览器端一键切换**:页面右下角悬浮控制面板,支持 Mock / 开发 / 生产环境无缝切换,无需修改代码或重启服务;
15
+ - **Mock 数据热更新**:修改 Mock 文件立即生效,无需重启服务;
16
+ - **自动路径匹配**:根据接口路径自动查找对应的 Mock 文件;
17
+ - **智能请求处理**:支持 POST/PUT/PATCH 请求 body 自动解析与转发;
18
+ - **热重载友好**:全局单例模式,防止 CRA 热重载时重复创建实例,并且热重载不会丢失当前的环境状态,实现状态持久化;
19
+ - **全平台兼容**:
20
+ - 支持 **CRA (Create React App)**、**Vue CLI** 及所有基于 Webpack 的项目;
21
+ - 兼容 Webpack 3/4/5 的 DevServer API 差异;
22
+ - **开箱即用**:自动注入 UI 代码,自动配置路由,零配置即可体验;
11
23
 
24
+ ## 与其他方案VS对比
12
25
 
13
- ## 🎯 核心特性
26
+ | 功能 | mock-switch-webpack-plugin | mocker-api | 其他 |
27
+ |------|---------------------------|------------|-------------------|
28
+ | 浏览器可视化一键切换 | ✅ | ❌ | ❌ |
29
+ | Mock数据热更新 | ✅ | ✅ | ❌需重启 |
30
+ | 环境持久化 | ✅ | ❌ | ❌ |
31
+ | POST Body 自动解析转发 | ✅ | ❌需手动 | ❌ 需手动 |
32
+ | CRA 完美支持 | ✅ | ❌ | ❌ |
14
33
 
15
- ### ✨ 浏览器端一键环境切换
16
-
17
- - 右下角悬浮控制面板,可视化切换环境
18
-
19
- - 实时状态显示,不同环境对应不同颜色标识
20
-
21
- - 无需修改代码或重启服务
22
-
23
- ### 🔥 Mock 数据热更新
24
-
25
- - 修改 Mock 文件立即生效,无需重启 Webpack DevServer
26
-
27
- - 自动清除 require 缓存,实时加载最新数据
28
-
29
- - 支持开发过程中快速调试接口
30
-
31
- ### 📦 开箱即用,零配置
32
-
33
- - 支持 **CRA \(Create React App\)**、**Vue CLI**、**原生 Webpack** 等所有项目
34
-
35
- - 兼容 Webpack 3/4/5 全版本
36
-
37
- - 兼容 Webpack 打包发布模式
38
-
39
- ### 🔌 智能请求处理
40
-
41
- - POST/PUT/PATCH 请求 body 自动解析与转发
42
-
43
- - 支持 JSON 和表单格式请求
44
-
45
- - 自动移除 API 前缀,无缝代理转发
46
-
47
- ### 🛡️ 热重载友好
48
-
49
- - 全局单例模式,防止 CRA 热重载时重复创建实例
50
-
51
- - 环境状态跨热重载持久化
52
-
53
- - 解决全局状态隔离问题
54
-
55
- ## 🆚 方案对比
56
-
57
- |特性|Mock Switch|mockjs|http\-proxy\-middleware|
58
- |---|---|---|---|
59
- |浏览器可视化切换|✅|❌|❌|
60
- |Mock 数据热更新|✅|❌|\-|
61
- |无需重启服务|✅|❌|❌|
62
- |多环境一键切换|✅|❌|✅|
63
- |POST Body 自动解析|✅|❌|⚠️ 需手动|
64
- |CRA 友好支持|✅|⚠️|⚠️|
65
- |打包兼容|✅|✅|✅|
66
-
67
- ## 📦 安装
34
+ ## 安装
68
35
 
69
36
  ```bash
70
37
  npm install mock-switch-webpack-plugin --save-dev
71
38
  # or
72
39
  yarn add mock-switch-webpack-plugin -D
73
- # or
74
- pnpm add mock-switch-webpack-plugin -D
75
40
  ```
76
41
 
77
- ## 🚀 快速开始
42
+ ## 使用
78
43
 
79
- ### 方式一:原生 Webpack 项目(推荐)
44
+ ### 方式一:原生 Webpack 项目
80
45
 
81
46
  **webpack\.config\.js**
82
47
 
@@ -110,9 +75,8 @@ CRA 项目需要同时配置 **webpack\.config\.js** 和 **setupProxy\.js** 两
110
75
 
111
76
  #### 步骤 1:配置 webpack\.config\.js
112
77
 
113
- 使用 `craco` 或 `react-app-rewired` 覆盖 Webpack 配置:
114
78
 
115
- **craco\.config\.js** 或 **config\-overrides\.js**
79
+ **webpack\.config\.js**
116
80
 
117
81
  ```javascript
118
82
  const MockSwitchWebpackPlugin = require('mock-switch-webpack-plugin');
@@ -121,8 +85,7 @@ module.exports = {
121
85
  webpack: {
122
86
  plugins: [
123
87
  new MockSwitchWebpackPlugin({
124
- autoRegisterMiddleware: false, // CRA 必须设为 false
125
- hotReload: true
88
+ autoRegisterMiddleware: false, // CRA 必须设为 false
126
89
  })
127
90
  ]
128
91
  }
@@ -135,7 +98,7 @@ module.exports = {
135
98
 
136
99
  #### 步骤 2:配置 src/setupProxy\.js
137
100
 
138
- **src/setupProxy\.js**(CRA 官方约定的代理配置文件)
101
+ **src/setupProxy\.js**
139
102
 
140
103
  ```javascript
141
104
  const { createMockMiddleware } = require('mock-switch-webpack-plugin');
@@ -160,13 +123,13 @@ module.exports = function(app) {
160
123
 
161
124
  > 💡 **setupProxy\.js 作用说明**:
162
125
  >
163
- > - CRA 开发服务器启动时自动加载此文件
126
+ > - CRA 开发服务器启动时自动加载此文件;
164
127
  >
165
- > - 用于注册 Express 中间件,接管 API 请求
128
+ > - 用于注册 Express 中间件,接管 API 请求;
166
129
  >
167
- > - 实现 Mock 数据返回与代理转发逻辑
130
+ > - 实现 Mock 数据返回与代理转发逻辑;
168
131
  >
169
- > - 使用单例模式,解决 CRA 热重载导致的重复实例问题
132
+ > - 使用单例模式,解决 CRA 热重载导致的重复实例问题;
170
133
  >
171
134
  >
172
135
 
@@ -188,8 +151,16 @@ module.exports = {
188
151
  };
189
152
  ```
190
153
 
191
- ## ⚙️ 配置说明
154
+ ### 启动开发服务
155
+
156
+ ```bash
157
+ npm run start
158
+ ```
192
159
 
160
+ - 打开浏览器,你会看到右下角的悬浮切换按钮
161
+ - 点击按钮展开控制面板,实现环境实时切换 🎉
162
+
163
+ ## 配置说明
193
164
  ### 完整配置项
194
165
 
195
166
  ```javascript
@@ -240,42 +211,30 @@ new MockSwitchWebpackPlugin({
240
211
  })
241
212
  ```
242
213
 
243
- ### environments 详解
214
+ ### environments 配置详解
244
215
 
245
216
  每个环境配置包含:
246
217
 
247
218
  |参数|类型|说明|
248
219
  |---|---|---|
249
- |`name`|string|环境显示名称,支持 emoji|
220
+ |`name`|string|环境名称|
250
221
  |`target`|string \| null|代理目标地址,null 表示使用 Mock|
251
222
 
252
223
  **示例:自定义环境**
253
224
 
254
225
  ```javascript
255
226
  environments: {
256
- mock: { name: '🟢 Mock环境', target: null },
257
- test: { name: '🔵 测试环境', target: 'http://test-api.example.com' },
258
- pre: { name: '🟡 预发环境', target: 'http://pre-api.example.com' },
227
+ mock: { name: 'Mock环境', target: null },
228
+ dev: { name: '开发环境', target: 'http://dev-api.example.com' },
259
229
  prod: { name: '🔴 生产环境', target: 'https://api.example.com' }
260
230
  }
261
231
  ```
262
-
263
- ---
264
-
265
232
  ### setupProxy\.js 配置详解(CRA 专用)
266
233
 
267
234
  #### 什么是 setupProxy\.js?
268
235
 
269
236
  `setupProxy.js` 是 **Create React App** 官方约定的代理配置文件,位于 `src/` 目录下,CRA 开发服务器启动时会**自动加载**此文件。
270
237
 
271
- #### 为什么 CRA 需要 setupProxy\.js?
272
-
273
- 1. **CRA 隐藏了 webpack\.config\.js**,无法直接修改 DevServer 配置
274
-
275
- 2. **HTTP 代理中间件**必须在 Express 应用层注册
276
-
277
- 3. **Mock 逻辑**需要在请求到达 React 之前拦截处理
278
-
279
238
  #### createMockMiddleware 函数参数
280
239
 
281
240
  ```javascript
@@ -287,37 +246,7 @@ createMockMiddleware(app, options)
287
246
  |`app`|Express|Express 应用实例,由 CRA 传入|
288
247
  |`options`|Object|配置选项,与插件构造函数参数一致|
289
248
 
290
- #### 内部工作原理
291
-
292
- ```javascript
293
- function createMockMiddleware(app, options) {
294
- // 1. 单例模式:热重载复用已有实例
295
- if (_pluginSingleton) return _pluginSingleton;
296
-
297
- // 2. 创建插件实例(关闭自动注册中间件)
298
- _pluginSingleton = new MockSwitchWebpackPlugin({
299
- ...options,
300
- autoRegisterMiddleware: false
301
- });
302
-
303
- // 3. 手动注册路由和中间件
304
- _pluginSingleton.registerRoutesWithBodyParser(app);
305
-
306
- return _pluginSingleton;
307
- }
308
- ```
309
-
310
- #### ✅ 关键配置要点
311
-
312
- - **必须**设置 `autoRegisterMiddleware: false`
313
-
314
- - **必须**使用 `createMockMiddleware` 而非直接 `new MockSwitchWebpackPlugin()`
315
-
316
- - **支持**热重载:全局单例 \+ 状态持久化
317
-
318
- - **自动**注册 express\.json \(\) 和 urlencoded 中间件
319
-
320
- ## 📝 Mock 文件规范
249
+ ## Mock 文件规范
321
250
 
322
251
  ### 目录结构
323
252
 
@@ -399,78 +328,62 @@ module.exports = function(req, res) {
399
328
  }
400
329
  ```
401
330
 
402
- ## 🎨 控制面板预览
403
331
 
404
- 启动项目后,浏览器右下角会出现悬浮按钮:
405
332
 
406
- - 🟢 **绿色** \- Mock 环境
407
333
 
408
- - 🟡 **黄色** \- 开发环境
409
334
 
410
- - 🔴 **红色** \- 生产环境
411
335
 
412
- 点击按钮展开面板,点击对应环境即可实时切换。
336
+ ### 2. 创建 Mock 文件
413
337
 
414
- ## 🔧 API 接口
338
+ 在项目根目录创建 `mock` 文件夹,按以下命名规则创建文件:
415
339
 
416
- 插件自动注册以下控制接口,可用于编程式切换:
417
-
418
- ### 获取当前环境
419
-
420
- ```Plain Text
421
- GET /__mock_switch__/env
340
+ ```
341
+ mock/
342
+ ├── GET_user_list.json # GET /api/user/list
343
+ ├── POST_user_login.js # POST /api/user/login
344
+ ├── GET_user_1_detail.json # GET /api/user/1/detail
345
+ └── config.js # 其他配置
422
346
  ```
423
347
 
424
- **响应:**
348
+ #### 静态 Mock (JSON)
425
349
 
426
350
  ```json
351
+ // mock/GET_user_list.json
427
352
  {
428
- "currentEnv": "mock",
429
- "environments": [
430
- { "key": "mock", "name": "Mock环境", "target": null },
431
- { "key": "dev", "name": "开发环境", "target": "http://localhost:8080" },
432
- { "key": "prod", "name": "生产环境", "target": "https://api.example.com" }
433
- ]
353
+ "code": 0,
354
+ "message": "success",
355
+ "data": {
356
+ "list": [
357
+ { "id": 1, "name": "张三" },
358
+ { "id": 2, "name": "李四" }
359
+ ]
360
+ },
361
+ "_delay": 500
434
362
  }
435
363
  ```
436
364
 
437
- ### 切换环境
438
-
439
- ```Plain Text
440
- POST /__mock_switch__/env
441
- Content-Type: application/json
365
+ #### 动态 Mock (JS)
442
366
 
443
- {
444
- "env": "dev"
445
- }
367
+ ```javascript
368
+ // mock/POST_user_login.js
369
+ module.exports = function(req, res) {
370
+ const { username, password } = req.body;
371
+
372
+ if (username === 'admin' && password === '123456') {
373
+ return {
374
+ code: 0,
375
+ message: '登录成功',
376
+ data: { token: 'mock_' + Date.now() }
377
+ };
378
+ }
379
+
380
+ return {
381
+ code: 401,
382
+ message: '用户名或密码错误'
383
+ };
384
+ };
446
385
  ```
447
386
 
448
- ## 常见问题
449
-
450
- ### Q: CRA 热重载后环境状态丢失?
451
-
452
- A: 插件已内置全局状态持久化机制,使用 `createMockMiddleware` 即可自动处理。
453
-
454
- ### Q: Mock 文件修改后不生效?
455
-
456
- A: 确保 `hotReload: true`(默认开启),插件会自动清除 require 缓存。
457
-
458
- ### Q: POST 请求 body 为空?
459
-
460
- A: 插件已内置 express\.json \(\) 和 urlencoded 解析中间件,无需额外配置。
461
-
462
- ### Q: 代理请求 404?
463
-
464
- A: 插件会自动移除 `apiPrefix` 前缀,如 `/api/users` → `/users`,确保后端接口路径正确。
465
-
466
- ## 📄 License
467
-
468
- MIT © [lebron\_shi](https://github.com/shilimingY)
469
-
470
- ---
471
-
472
-
473
-
474
- **如果这个插件对你有帮助,欢迎给个 ⭐ Star**
387
+ **如果这个插件对你有帮助,欢迎给个 [⭐ Star](https://github.com/shilimingY/mock-switch-webpack-plugin) 哦!!!**
475
388
 
476
389
  [GitHub](https://github.com/shilimingY/mock-switch-webpack-plugin) • [Issues](https://github.com/shilimingY/mock-switch-webpack-plugin/issues)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mock-switch-webpack-plugin",
3
- "version": "1.2.0",
3
+ "version": "1.3.1",
4
4
  "description": "前端Mock神器!浏览器一键切换Mock/开发/生产环境的Webpack插件,支持接口代理、Mock数据热更新、POST请求自动转发等特性,零配置接入React/Vue等所有Webpack项目,彻底告别需手动修改代码来切换环境的低效开发方式。",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
@@ -17,6 +17,7 @@
17
17
  "前端接口代理",
18
18
  "Mock一键切换",
19
19
  "webpack-mock",
20
+ "webpack",
20
21
  "env-switch",
21
22
  "Mock热更新",
22
23
  "前端Mock神器"