62 lines
1.8 KiB
JavaScript
62 lines
1.8 KiB
JavaScript
// src/mocks/browser.js
|
||
// 浏览器环境的 MSW Worker
|
||
|
||
import { setupWorker } from 'msw/browser';
|
||
import { handlers } from './handlers';
|
||
|
||
// 创建 Service Worker 实例
|
||
export const worker = setupWorker(...handlers);
|
||
|
||
// 启动 Mock Service Worker
|
||
export async function startMockServiceWorker() {
|
||
// 只在开发环境且 REACT_APP_ENABLE_MOCK=true 时启动
|
||
const shouldEnableMock = process.env.REACT_APP_ENABLE_MOCK === 'true';
|
||
|
||
if (!shouldEnableMock) {
|
||
console.log('[MSW] Mock 已禁用 (REACT_APP_ENABLE_MOCK=false)');
|
||
return;
|
||
}
|
||
|
||
try {
|
||
await worker.start({
|
||
// 不显示未拦截的请求警告(可选)
|
||
onUnhandledRequest: 'bypass',
|
||
|
||
// 自定义 Service Worker URL(如果需要)
|
||
serviceWorker: {
|
||
url: '/mockServiceWorker.js',
|
||
},
|
||
|
||
// 静默模式(不在控制台打印启动消息)
|
||
quiet: false,
|
||
});
|
||
|
||
console.log(
|
||
'%c[MSW] Mock Service Worker 已启动 🎭',
|
||
'color: #4CAF50; font-weight: bold; font-size: 14px;'
|
||
);
|
||
console.log(
|
||
'%c提示: 所有 API 请求将使用本地 Mock 数据',
|
||
'color: #FF9800; font-size: 12px;'
|
||
);
|
||
console.log(
|
||
'%c要禁用 Mock,请设置 REACT_APP_ENABLE_MOCK=false',
|
||
'color: #2196F3; font-size: 12px;'
|
||
);
|
||
} catch (error) {
|
||
console.error('[MSW] 启动失败:', error);
|
||
}
|
||
}
|
||
|
||
// 停止 Mock Service Worker
|
||
export function stopMockServiceWorker() {
|
||
worker.stop();
|
||
console.log('[MSW] Mock Service Worker 已停止');
|
||
}
|
||
|
||
// 重置所有 Handlers
|
||
export function resetMockHandlers() {
|
||
worker.resetHandlers();
|
||
console.log('[MSW] Handlers 已重置');
|
||
}
|