index.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. /**
  2. * MSW Mock 服务配置
  3. */
  4. import { setupWorker } from 'msw/browser';
  5. import { handlers } from './handlers/index.js';
  6. // 创建 MSW Worker
  7. export const worker = setupWorker(...handlers);
  8. /**
  9. * 启动 Mock 服务
  10. * @param {Object} options 配置选项
  11. * @returns {Promise}
  12. */
  13. export const startMocking = async (options = {}) => {
  14. const defaultOptions = {
  15. onUnhandledRequest: 'bypass', // 未处理的请求直接通过
  16. quiet: false, // 是否静默模式
  17. ...options,
  18. };
  19. // 只在开发环境启动
  20. if (process.env.NODE_ENV === 'development') {
  21. try {
  22. await worker.start(defaultOptions);
  23. if (!defaultOptions.quiet) {
  24. console.log('🚀 [MSW] Mock 服务已启动');
  25. console.log('📋 [MSW] 已注册的接口数量:', handlers.length);
  26. }
  27. return true;
  28. } catch (error) {
  29. console.error('❌ [MSW] Mock 服务启动失败:', error);
  30. return false;
  31. }
  32. }
  33. return false;
  34. };
  35. /**
  36. * 停止 Mock 服务
  37. */
  38. export const stopMocking = () => {
  39. worker.stop();
  40. console.log('🛑 [MSW] Mock 服务已停止');
  41. };
  42. /**
  43. * 重置 Mock 服务
  44. */
  45. export const resetMocking = () => {
  46. worker.resetHandlers();
  47. console.log('🔄 [MSW] Mock 服务已重置');
  48. };
  49. /**
  50. * 动态添加处理器
  51. * @param {Array} newHandlers 新的处理器
  52. */
  53. export const addHandlers = (newHandlers) => {
  54. worker.use(...newHandlers);
  55. console.log(`➕ [MSW] 已添加 ${newHandlers.length} 个新处理器`);
  56. };
  57. // 开发环境下挂载到 window 对象,方便调试
  58. if (process.env.NODE_ENV === 'development') {
  59. window.mockService = {
  60. start: startMocking,
  61. stop: stopMocking,
  62. reset: resetMocking,
  63. addHandlers,
  64. worker,
  65. };
  66. }