vite项目中使用mockjs

官网地址:官网地址

vite项目中使用mockjs

  1. 安装
javascript 复制代码
    pnpm i mockjs -D
    pnpm i vite-plugin-mock -D
  1. 在项目根目录或者src下建mock文件夹,在文件夹下建不同的.js模块文件。如 login.js
javascript 复制代码
export default [
    {
       url: '/api/login',
       method: 'post',
       response: ({ body }) => {
        return {
          'code|1': [200, 401],
          data: body,
        }
      },
    }
];

// 若项目用的ts,需要给导出数组给类型
import type { MockMethod } from 'vite-plugin-mock';
export default [
    {
       url: '/api/login',
       method: 'post',
       response: ({ body }) => {
        return {
          'code|1': [200, 401],
          data: body,
        }
      },
    }
] as MockMethod[];
  1. vite.config.js中配置mock
javascript 复制代码
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import path from 'path';
const resolve = (dir) => path.join(__dirname, dir);
import { viteMockServe } from 'vite-plugin-mock'; // 引入

export default defineConfig({
  plugins: [
    react(),
    // 在插件中注册
    viteMockServe({
      mockPath: './src/mock', // mock文件夹的位置
    }),
  ],
  resolve: {
    alias: {
      '@': resolve('src'),
      '@assets': resolve('src/assets'),
      '@components': resolve('src/components'),
      '@router': resolve('src/router'), // 路由
      '@utils': resolve('src/utils'), // 公用js
      '@views': resolve('src/views'),
      '@api': resolve('src/api'),
    },
  },
  server: {
    port: 8080,
    host: "0.0.0.0",
  }
})
  1. 此时就可以在项目中正常使用接口 /api/login

src/api/login.js中正常封装api

javascript 复制代码
import request from '@/utils/request.js';

export const setLogin = (data) => {
    return request.post('/login', data);
}
  1. 在具体页面中使用该api
javascript 复制代码
    const onFinish = (values) => {
        const { ehireId } = values;
        try {
            setLogin({ ehireId }).then(({code, data}) => {
                if (code === 200 && data) {
                    navigate('/talentmanagement');
                } else {
                    openErrorTip();
                }
            });
        } catch (error) {
            openErrorTip();
        }
    };

开发环境使用的话,以上就可以了,但要在生产环境使用,需要做一下处理,但没验证过

  1. 在mock文件夹下建index.js文件
javascript 复制代码
import { createProdMockServer  } from 'vite-plugin-mock/es/createProdMockServer'
import m_login from './login.js'

// const modules = import.meta.glob('./*.js', { eager: true });
// const mockModules = [];
// Object.keys(modules).forEach((key) => {
//   if (key.includes('/_')) {
//     return;
//   }
//   mockModules.push(...modules[key].default);
// });

export default function setupMock () {
    // createProdMockServer(mockModules);
    createProdMockServer([...m_login]);
}
  1. 注册setupMock()
  • 要么在mian.js中 引入 mock/index.js 并注册 setupMock()
  • 要么vite.config.js插件配置时
javascript 复制代码
export default ({ command }) => {

  return {
    plugins: [
      vue(),
      viteMockServe({
        mockPath: 'mock', //解析根目录下的mock文件夹
        localEnabled: command === 'serve', //开发打包开关
        prodEnabled: command !== 'serve' ,// 生产打包开关
        supportTs: true, // 打开后,可以读取 ts 文件模块。 请注意,打开后将无法监视.js 文件。
    //这样可以控制关闭mock的时候不让mock打包到最终代码内
      injectCode: `
          import { setupMock } from '../mock';
          setupMock();
          `,
      }),
    ],
  }
}   
  1. 开发环境或本地开发也可以注册 setupMock,没有啥影响
  • 建环境变量 VITE_APP_MOCK=true
  • mian.js中
javascript 复制代码
import setupMock from './mock/index.js'; //mock
if(import.meta.env === 'development' && import.meta.VITE_REACT_APP_MOCK){ //dev环境开启mock
     setupMock();
}
相关推荐
清灵xmf3 分钟前
揭开 Vue 3 中大量使用 ref 的隐藏危机
前端·javascript·vue.js·ref
su1ka1118 分钟前
re题(35)BUUCTF-[FlareOn4]IgniteMe
前端
测试界柠檬10 分钟前
面试真题 | web自动化关闭浏览器,quit()和close()的区别
前端·自动化测试·软件测试·功能测试·程序人生·面试·自动化
多多*11 分钟前
OJ在线评测系统 登录页面开发 前端后端联调实现全栈开发
linux·服务器·前端·ubuntu·docker·前端框架
2301_8010741511 分钟前
TypeScript异常处理
前端·javascript·typescript
小阿飞_13 分钟前
报错合计-1
前端
caperxi14 分钟前
前端开发中的防抖与节流
前端·javascript·html
霸气小男14 分钟前
react + antDesign封装图片预览组件(支持多张图片)
前端·react.js
susu108301891115 分钟前
前端css样式覆盖
前端·css
学习路上的小刘17 分钟前
vue h5 蓝牙连接 webBluetooth API
前端·javascript·vue.js