mock-switch-webpack-plugin 1.1.1 → 1.3.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 +284 -200
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,305 +1,389 @@
|
|
|
1
|
-
# Mock Switch Webpack Plugin
|
|
2
|
-
|
|
3
1
|
<div align="center">
|
|
4
2
|
|
|
5
|
-

|
|
3
|
+
[](https://www.npmjs.com/package/mock-switch-webpack-plugin)
|
|
7
4
|

|
|
8
5
|
|
|
9
|
-
**基于
|
|
6
|
+
**基于 webpack 的开发环境 API Mock 与代理管理插件**
|
|
10
7
|
|
|
11
8
|
</div>
|
|
12
9
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
### 🎯 核心功能
|
|
16
|
-
- **🔄 浏览器端一键切换** - 页面内悬浮面板,Mock / 测试 / 生产环境无缝切换
|
|
17
|
-
- **🔥 Mock 数据热更新** - 修改 Mock 文件立即生效,无需重启服务
|
|
18
|
-
- **📝 自动记录真实接口** - 代理请求时自动记录返回,一键保存为 Mock 文件
|
|
19
|
-
- **📂 自动路径匹配** - 根据接口路径自动查找对应 Mock 文件
|
|
20
|
-
- **⚡ 零侵入式设计** - 纯 webpack 插件,无需修改业务代码
|
|
10
|
+
在前端开发中,频繁切换接口环境(Mock/开发/生产)往往需要修改代码或重启服务。本插件通过 Webpack 与中间件技术,实现了一键可视化环境切换,让开发调试变得前所未有的流畅与高效。
|
|
21
11
|
|
|
22
|
-
|
|
23
|
-
- 右下角悬浮切换按钮,状态指示灯(绿=Mock/黄=测试/红=生产)
|
|
24
|
-
- 优雅的下拉面板,环境列表 + 已记录接口;
|
|
25
|
-
- 点击即可保存真实接口返回为 Mock 文件
|
|
12
|
+
## 核心特性
|
|
26
13
|
|
|
27
|
-
|
|
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 代码,自动配置路由,零配置即可体验;
|
|
28
23
|
|
|
29
|
-
|
|
30
|
-
|------|---------------------------|------------|-------------------|--------|
|
|
31
|
-
| 浏览器端一键切换 | ✅ | ❌ | ❌ | ❌ |
|
|
32
|
-
| Mock数据热更新 | ✅ | ✅ | ✅ | ❌ |
|
|
33
|
-
| 自动记录真实接口 | ✅ | ❌ | ❌ | ❌ |
|
|
34
|
-
| 一键保存为Mock | ✅ | ❌ | ❌ | ❌ |
|
|
35
|
-
| 自动路径匹配 | ✅ | ✅ | ✅ | ❌ |
|
|
36
|
-
| Webpack5支持 | ✅ | ✅ | ⚠️ | ❌ |
|
|
37
|
-
| 零侵入集成 | ✅ | ⚠️ | ⚠️ | ❌ |
|
|
38
|
-
| 动态Mock函数 | ✅ | ✅ | ✅ | ✅ |
|
|
39
|
-
| 网络延迟模拟 | ✅ | ✅ | ❌ | ✅ |
|
|
24
|
+
## 与其他方案VS对比
|
|
40
25
|
|
|
41
|
-
|
|
26
|
+
| 功能 | mock-switch-webpack-plugin | mocker-api | 其他 |
|
|
27
|
+
|------|---------------------------|------------|-------------------|
|
|
28
|
+
| 浏览器可视化一键切换 | ✅ | ❌ | ❌ |
|
|
29
|
+
| Mock数据热更新 | ✅ | ✅ | ❌需重启 |
|
|
30
|
+
| 环境持久化 | ✅ | ❌ | ❌ |
|
|
31
|
+
| POST Body 自动解析转发 | ✅ | ❌需手动 | ❌ 需手动 |
|
|
32
|
+
| CRA 完美支持 | ✅ | ❌ | ❌ |
|
|
42
33
|
|
|
43
|
-
##
|
|
34
|
+
## 安装
|
|
44
35
|
|
|
45
36
|
```bash
|
|
46
37
|
npm install mock-switch-webpack-plugin --save-dev
|
|
47
38
|
# or
|
|
48
39
|
yarn add mock-switch-webpack-plugin -D
|
|
49
|
-
# or
|
|
50
|
-
pnpm add mock-switch-webpack-plugin -D
|
|
51
40
|
```
|
|
52
41
|
|
|
53
|
-
##
|
|
42
|
+
## 使用
|
|
54
43
|
|
|
55
|
-
###
|
|
44
|
+
### 方式一:原生 Webpack 项目
|
|
45
|
+
|
|
46
|
+
**webpack\.config\.js**
|
|
56
47
|
|
|
57
48
|
```javascript
|
|
58
|
-
const
|
|
49
|
+
const MockSwitchWebpackPlugin = require('mock-switch-webpack-plugin');
|
|
59
50
|
|
|
60
51
|
module.exports = {
|
|
61
52
|
// ... 其他配置
|
|
62
53
|
plugins: [
|
|
63
|
-
new
|
|
64
|
-
// Mock文件目录(相对项目根目录)
|
|
54
|
+
new MockSwitchWebpackPlugin({
|
|
65
55
|
mockDir: './mock',
|
|
66
|
-
// 接口前缀,只拦截该前缀的请求
|
|
67
56
|
apiPrefix: '/api',
|
|
68
|
-
// 环境配置
|
|
69
57
|
environments: {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
58
|
+
dev: {
|
|
59
|
+
name: '开发环境',
|
|
60
|
+
target: 'http://localhost:8080'
|
|
61
|
+
},
|
|
62
|
+
prod: {
|
|
63
|
+
name: '生产环境',
|
|
64
|
+
target: 'https://api.example.com'
|
|
65
|
+
}
|
|
66
|
+
}
|
|
78
67
|
})
|
|
79
|
-
]
|
|
80
|
-
devServer: {
|
|
81
|
-
// 插件会自动注入中间件,无需额外配置
|
|
82
|
-
hot: true,
|
|
83
|
-
open: true
|
|
84
|
-
}
|
|
68
|
+
]
|
|
85
69
|
};
|
|
86
70
|
```
|
|
87
71
|
|
|
88
|
-
###
|
|
72
|
+
### 方式二:CRA \(Create React App\) 项目
|
|
89
73
|
|
|
90
|
-
|
|
74
|
+
CRA 项目需要同时配置 **webpack\.config\.js** 和 **setupProxy\.js** 两个文件。
|
|
91
75
|
|
|
92
|
-
|
|
93
|
-
mock/
|
|
94
|
-
├── GET_user_list.json # GET /api/user/list
|
|
95
|
-
├── POST_user_login.js # POST /api/user/login
|
|
96
|
-
├── GET_user_1_detail.json # GET /api/user/1/detail
|
|
97
|
-
└── config.js # 其他配置
|
|
98
|
-
```
|
|
76
|
+
#### 步骤 1:配置 webpack\.config\.js
|
|
99
77
|
|
|
100
|
-
#### 静态 Mock (JSON)
|
|
101
78
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
{
|
|
79
|
+
**webpack\.config\.js**
|
|
80
|
+
|
|
81
|
+
```javascript
|
|
82
|
+
const MockSwitchWebpackPlugin = require('mock-switch-webpack-plugin');
|
|
83
|
+
|
|
84
|
+
module.exports = {
|
|
85
|
+
webpack: {
|
|
86
|
+
plugins: [
|
|
87
|
+
new MockSwitchWebpackPlugin({
|
|
88
|
+
autoRegisterMiddleware: false, // CRA 必须设为 false
|
|
89
|
+
})
|
|
111
90
|
]
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
}
|
|
91
|
+
}
|
|
92
|
+
};
|
|
115
93
|
```
|
|
116
94
|
|
|
117
|
-
|
|
95
|
+
> 💡 **作用**:向打包输出注入客户端 UI 代码,实现浏览器右下角的环境切换悬浮面板。
|
|
96
|
+
>
|
|
97
|
+
>
|
|
98
|
+
|
|
99
|
+
#### 步骤 2:配置 src/setupProxy\.js
|
|
100
|
+
|
|
101
|
+
**src/setupProxy\.js**
|
|
118
102
|
|
|
119
103
|
```javascript
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
104
|
+
const { createMockMiddleware } = require('mock-switch-webpack-plugin');
|
|
105
|
+
|
|
106
|
+
module.exports = function(app) {
|
|
107
|
+
createMockMiddleware(app, {
|
|
108
|
+
mockDir: './mock',
|
|
109
|
+
apiPrefix: '/api',
|
|
110
|
+
environments: {
|
|
111
|
+
dev: {
|
|
112
|
+
name: '开发环境',
|
|
113
|
+
target: 'http://localhost:8080'
|
|
114
|
+
},
|
|
115
|
+
prod: {
|
|
116
|
+
name: '生产环境',
|
|
117
|
+
target: 'https://api.example.com'
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
};
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
> 💡 **setupProxy\.js 作用说明**:
|
|
125
|
+
>
|
|
126
|
+
> - CRA 开发服务器启动时自动加载此文件;
|
|
127
|
+
>
|
|
128
|
+
> - 用于注册 Express 中间件,接管 API 请求;
|
|
129
|
+
>
|
|
130
|
+
> - 实现 Mock 数据返回与代理转发逻辑;
|
|
131
|
+
>
|
|
132
|
+
> - 使用单例模式,解决 CRA 热重载导致的重复实例问题;
|
|
133
|
+
>
|
|
134
|
+
>
|
|
135
|
+
|
|
136
|
+
### 方式三:Vue CLI 项目
|
|
137
|
+
|
|
138
|
+
**vue\.config\.js**
|
|
139
|
+
|
|
140
|
+
```javascript
|
|
141
|
+
const MockSwitchWebpackPlugin = require('mock-switch-webpack-plugin');
|
|
142
|
+
|
|
143
|
+
module.exports = {
|
|
144
|
+
configureWebpack: {
|
|
145
|
+
plugins: [
|
|
146
|
+
new MockSwitchWebpackPlugin({
|
|
147
|
+
// 配置项
|
|
148
|
+
})
|
|
149
|
+
]
|
|
130
150
|
}
|
|
131
|
-
|
|
132
|
-
return {
|
|
133
|
-
code: 401,
|
|
134
|
-
message: '用户名或密码错误'
|
|
135
|
-
};
|
|
136
151
|
};
|
|
137
152
|
```
|
|
138
153
|
|
|
139
|
-
###
|
|
154
|
+
### 启动开发服务
|
|
140
155
|
|
|
141
156
|
```bash
|
|
142
157
|
npm run start
|
|
143
158
|
```
|
|
144
159
|
|
|
145
|
-
打开浏览器,你会看到右下角的悬浮切换按钮
|
|
160
|
+
- 打开浏览器,你会看到右下角的悬浮切换按钮
|
|
161
|
+
- 点击按钮展开控制面板,实现环境实时切换 🎉
|
|
162
|
+
|
|
163
|
+
## 配置说明
|
|
164
|
+
### 完整配置项
|
|
165
|
+
|
|
166
|
+
```javascript
|
|
167
|
+
new MockSwitchWebpackPlugin({
|
|
168
|
+
/**
|
|
169
|
+
* Mock 文件存放目录
|
|
170
|
+
* @default './mock'
|
|
171
|
+
*/
|
|
172
|
+
mockDir: './mock',
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* API 请求前缀
|
|
176
|
+
* @default '/api'
|
|
177
|
+
*/
|
|
178
|
+
apiPrefix: '/api',
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* 是否启用 Mock 文件热更新
|
|
182
|
+
* @default true
|
|
183
|
+
*/
|
|
184
|
+
hotReload: true,
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* 是否自动注册 DevServer 中间件
|
|
188
|
+
* @default true
|
|
189
|
+
* CRA 项目请设为 false,使用 createMockMiddleware
|
|
190
|
+
*/
|
|
191
|
+
autoRegisterMiddleware: true,
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* 环境配置
|
|
195
|
+
* 内置 mock/dev/prod 三个环境,可自定义名称和目标地址
|
|
196
|
+
*/
|
|
197
|
+
environments: {
|
|
198
|
+
mock: {
|
|
199
|
+
name: 'Mock环境',
|
|
200
|
+
target: null // null 表示使用本地Mock文件
|
|
201
|
+
},
|
|
202
|
+
dev: {
|
|
203
|
+
name: '开发环境',
|
|
204
|
+
target: 'http://localhost:8080'
|
|
205
|
+
},
|
|
206
|
+
prod: {
|
|
207
|
+
name: '生产环境',
|
|
208
|
+
target: 'https://api.example.com'
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
})
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### environments 配置详解
|
|
146
215
|
|
|
147
|
-
|
|
216
|
+
每个环境配置包含:
|
|
148
217
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
| `environments` | `object` | 见下方 | 环境配置列表 |
|
|
154
|
-
| `autoRecord` | `boolean` | `true` | 是否自动记录真实接口 |
|
|
155
|
-
| `hotReload` | `boolean` | `true` | 是否开启 Mock 热更新 |
|
|
156
|
-
| `port` | `number` | `38080` | 控制面板端口 |
|
|
218
|
+
|参数|类型|说明|
|
|
219
|
+
|---|---|---|
|
|
220
|
+
|`name`|string|环境名称|
|
|
221
|
+
|`target`|string \| null|代理目标地址,null 表示使用 Mock|
|
|
157
222
|
|
|
158
|
-
|
|
223
|
+
**示例:自定义环境**
|
|
159
224
|
|
|
160
225
|
```javascript
|
|
161
|
-
{
|
|
162
|
-
mock: { name: 'Mock环境', target: null },
|
|
163
|
-
|
|
164
|
-
prod: { name: '生产环境', target: 'https://api.example.com' }
|
|
226
|
+
environments: {
|
|
227
|
+
mock: { name: 'Mock环境', target: null },
|
|
228
|
+
dev: { name: '开发环境', target: 'http://dev-api.example.com' },
|
|
229
|
+
prod: { name: '🔴 生产环境', target: 'https://api.example.com' }
|
|
165
230
|
}
|
|
166
231
|
```
|
|
232
|
+
### setupProxy\.js 配置详解(CRA 专用)
|
|
233
|
+
|
|
234
|
+
#### 什么是 setupProxy\.js?
|
|
167
235
|
|
|
168
|
-
|
|
236
|
+
`setupProxy.js` 是 **Create React App** 官方约定的代理配置文件,位于 `src/` 目录下,CRA 开发服务器启动时会**自动加载**此文件。
|
|
169
237
|
|
|
170
|
-
|
|
238
|
+
#### createMockMiddleware 函数参数
|
|
171
239
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
4. 后续请求自动走对应环境
|
|
240
|
+
```javascript
|
|
241
|
+
createMockMiddleware(app, options)
|
|
242
|
+
```
|
|
176
243
|
|
|
177
|
-
|
|
244
|
+
|参数|类型|说明|
|
|
245
|
+
|---|---|---|
|
|
246
|
+
|`app`|Express|Express 应用实例,由 CRA 传入|
|
|
247
|
+
|`options`|Object|配置选项,与插件构造函数参数一致|
|
|
178
248
|
|
|
179
|
-
|
|
180
|
-
2. 正常调用接口(插件会自动记录返回)
|
|
181
|
-
3. 打开面板,在「已记录的接口」列表中
|
|
182
|
-
4. 点击「保存」按钮,自动生成 Mock 文件
|
|
249
|
+
## Mock 文件规范
|
|
183
250
|
|
|
184
|
-
###
|
|
251
|
+
### 目录结构
|
|
252
|
+
|
|
253
|
+
```Plain Text
|
|
254
|
+
your-project/
|
|
255
|
+
├── mock/
|
|
256
|
+
│ ├── GET_users.json # GET /api/users
|
|
257
|
+
│ ├── POST_users.js # POST /api/users
|
|
258
|
+
│ ├── GET_users_1.json # GET /api/users/1
|
|
259
|
+
│ └── GET_users_1_orders.js # GET /api/users/1/orders
|
|
260
|
+
└── src/
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
### 文件命名规则
|
|
185
264
|
|
|
186
265
|
插件会按以下优先级查找 Mock 文件:
|
|
187
266
|
|
|
188
|
-
1. `{METHOD}_{path}.json`
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
267
|
+
1. `{METHOD}_{path}.json` \- 带方法的 JSON 文件
|
|
268
|
+
|
|
269
|
+
2. `{path}.json` \- 不带方法的 JSON 文件
|
|
270
|
+
|
|
271
|
+
3. `{METHOD}_{path}.js` \- 带方法的 JS 文件
|
|
193
272
|
|
|
194
|
-
|
|
273
|
+
4. `{path}.js` \- 不带方法的 JS 文件
|
|
195
274
|
|
|
196
|
-
|
|
275
|
+
> `path` 中的 `/` 会被替换为 `_`
|
|
276
|
+
>
|
|
277
|
+
>
|
|
197
278
|
|
|
198
|
-
|
|
279
|
+
### 静态 Mock \(JSON 文件\)
|
|
199
280
|
|
|
200
|
-
|
|
281
|
+
**mock/GET\_users\.json**
|
|
201
282
|
|
|
202
283
|
```json
|
|
203
284
|
{
|
|
204
285
|
"code": 0,
|
|
205
|
-
"
|
|
206
|
-
"
|
|
286
|
+
"message": "success",
|
|
287
|
+
"data": [
|
|
288
|
+
{ "id": 1, "name": "张三" },
|
|
289
|
+
{ "id": 2, "name": "李四" }
|
|
290
|
+
],
|
|
291
|
+
"_delay": 500
|
|
207
292
|
}
|
|
208
293
|
```
|
|
209
294
|
|
|
210
|
-
|
|
295
|
+
### 动态 Mock \(JS 文件\)
|
|
211
296
|
|
|
212
|
-
|
|
297
|
+
**mock/POST\_users\.js**
|
|
213
298
|
|
|
214
299
|
```javascript
|
|
215
|
-
module.exports =
|
|
216
|
-
//
|
|
217
|
-
const {
|
|
218
|
-
|
|
219
|
-
// 获取请求体
|
|
220
|
-
const body = req.body;
|
|
221
|
-
|
|
222
|
-
// 自定义响应头
|
|
223
|
-
res.setHeader('X-Custom-Header', 'mock');
|
|
300
|
+
module.exports = function(req, res) {
|
|
301
|
+
// 可以访问请求参数
|
|
302
|
+
const { name, age } = req.body;
|
|
224
303
|
|
|
304
|
+
// 返回动态数据
|
|
225
305
|
return {
|
|
226
306
|
code: 0,
|
|
227
|
-
|
|
307
|
+
message: 'success',
|
|
308
|
+
data: {
|
|
309
|
+
id: Date.now(),
|
|
310
|
+
name,
|
|
311
|
+
age,
|
|
312
|
+
createdAt: new Date().toISOString()
|
|
313
|
+
},
|
|
314
|
+
_delay: 300 // 模拟网络延迟(毫秒)
|
|
228
315
|
};
|
|
229
316
|
};
|
|
230
317
|
```
|
|
231
318
|
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
### 1. 发布到 npm
|
|
235
|
-
|
|
236
|
-
```bash
|
|
237
|
-
# 1. 登录 npm
|
|
238
|
-
npm login
|
|
239
|
-
|
|
240
|
-
# 2. 检查 package.json 配置
|
|
241
|
-
# - name: 包名(需唯一)
|
|
242
|
-
# - version: 语义化版本号
|
|
243
|
-
# - main: 入口文件
|
|
244
|
-
|
|
245
|
-
# 3. 发布
|
|
246
|
-
npm publish
|
|
247
|
-
|
|
248
|
-
# 发布私有包
|
|
249
|
-
npm publish --access public
|
|
250
|
-
```
|
|
251
|
-
|
|
252
|
-
### 2. 版本管理
|
|
319
|
+
### 特殊字段 `_delay`
|
|
253
320
|
|
|
254
|
-
|
|
255
|
-
# 补丁版本更新 (1.0.0 -> 1.0.1)
|
|
256
|
-
npm version patch
|
|
321
|
+
在返回数据中添加 `_delay` 字段可以模拟网络延迟:
|
|
257
322
|
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
323
|
+
```json
|
|
324
|
+
{
|
|
325
|
+
"code": 0,
|
|
326
|
+
"data": {},
|
|
327
|
+
"_delay": 1000 // 延迟 1 秒返回
|
|
328
|
+
}
|
|
263
329
|
```
|
|
264
330
|
|
|
265
|
-
### 3. 本地测试
|
|
266
331
|
|
|
267
|
-
```bash
|
|
268
|
-
# 在插件目录
|
|
269
|
-
npm link
|
|
270
332
|
|
|
271
|
-
# 在测试项目
|
|
272
|
-
npm link mock-switch-webpack-plugin
|
|
273
|
-
```
|
|
274
333
|
|
|
275
|
-
## ❓ 常见问题
|
|
276
334
|
|
|
277
|
-
### Q: 为什么切换环境后需要刷新页面?
|
|
278
|
-
A: 已发出的请求不会改变,新请求会走新环境。建议切换后刷新页面确保一致性。
|
|
279
335
|
|
|
280
|
-
###
|
|
281
|
-
A: 检查 `hotReload: true`,确保 Mock 文件在配置的 `mockDir` 目录下。
|
|
336
|
+
### 2. 创建 Mock 文件
|
|
282
337
|
|
|
283
|
-
|
|
284
|
-
A: 需在 devServer 中配置 `devMiddleware: { writeToDisk: true }` 或添加 body-parser 中间件。
|
|
338
|
+
在项目根目录创建 `mock` 文件夹,按以下命名规则创建文件:
|
|
285
339
|
|
|
286
|
-
|
|
287
|
-
|
|
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 # 其他配置
|
|
346
|
+
```
|
|
288
347
|
|
|
289
|
-
|
|
348
|
+
#### 静态 Mock (JSON)
|
|
290
349
|
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
350
|
+
```json
|
|
351
|
+
// mock/GET_user_list.json
|
|
352
|
+
{
|
|
353
|
+
"code": 0,
|
|
354
|
+
"message": "success",
|
|
355
|
+
"data": {
|
|
356
|
+
"list": [
|
|
357
|
+
{ "id": 1, "name": "张三" },
|
|
358
|
+
{ "id": 2, "name": "李四" }
|
|
359
|
+
]
|
|
360
|
+
},
|
|
361
|
+
"_delay": 500
|
|
362
|
+
}
|
|
363
|
+
```
|
|
298
364
|
|
|
299
|
-
|
|
365
|
+
#### 动态 Mock (JS)
|
|
300
366
|
|
|
301
|
-
|
|
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
|
+
};
|
|
385
|
+
```
|
|
302
386
|
|
|
303
|
-
|
|
387
|
+
**如果这个插件对你有帮助,欢迎给个 ⭐ Star 哦!!!**
|
|
304
388
|
|
|
305
|
-
|
|
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.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "前端Mock神器!浏览器一键切换Mock/开发/生产环境的Webpack插件,支持接口代理、Mock数据热更新、POST请求自动转发等特性,零配置接入React/Vue等所有Webpack项目,彻底告别需手动修改代码来切换环境的低效开发方式。",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"scripts": {
|