diff --git a/src/mocks/browser.js b/src/mocks/browser.js index 8a578394..95f82629 100644 --- a/src/mocks/browser.js +++ b/src/mocks/browser.js @@ -7,8 +7,18 @@ import { handlers } from './handlers'; // 创建 Service Worker 实例 export const worker = setupWorker(...handlers); +// 启动状态管理(防止重复启动) +let isStarting = false; +let isStarted = false; + // 启动 Mock Service Worker export async function startMockServiceWorker() { + // 防止重复启动 + if (isStarting || isStarted) { + console.log('[MSW] Mock Service Worker 已启动或正在启动中,跳过重复调用'); + return; + } + // 只在开发环境且 REACT_APP_ENABLE_MOCK=true 时启动 const shouldEnableMock = process.env.REACT_APP_ENABLE_MOCK === 'true'; @@ -17,6 +27,8 @@ export async function startMockServiceWorker() { return; } + isStarting = true; + try { await worker.start({ // 🎯 智能穿透模式(关键配置) @@ -34,6 +46,7 @@ export async function startMockServiceWorker() { quiet: false, }); + isStarted = true; console.log( '%c[MSW] Mock Service Worker 已启动 🎭', 'color: #4CAF50; font-weight: bold; font-size: 14px;' @@ -48,12 +61,20 @@ export async function startMockServiceWorker() { ); } catch (error) { console.error('[MSW] 启动失败:', error); + } finally { + isStarting = false; } } // 停止 Mock Service Worker export function stopMockServiceWorker() { + if (!isStarted) { + console.log('[MSW] Mock Service Worker 未启动,无需停止'); + return; + } + worker.stop(); + isStarted = false; console.log('[MSW] Mock Service Worker 已停止'); }