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();
}
相关推荐
GISer_Jing17 分钟前
[总结篇]个人网站
前端·javascript
疯狂的沙粒38 分钟前
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
前端·uni-app·html
小妖66642 分钟前
html 滚动条滚动过快会留下边框线
前端·html
heroboyluck1 小时前
Svelte 核心语法详解:Vue/React 开发者如何快速上手?
前端·svelte
海的诗篇_1 小时前
前端开发面试题总结-JavaScript篇(二)
开发语言·前端·javascript·typescript
琹箐1 小时前
ant-design4.xx实现数字输入框; 某些输入法数字需要连续输入两次才显示
前端·javascript·anti-design-vue
程序员-小李1 小时前
VuePress完美整合Toast消息提示
前端·javascript·vue.js
Uyker2 小时前
从零开始制作小程序简单概述
前端·微信小程序·小程序
EndingCoder6 小时前
React从基础入门到高级实战:React 实战项目 - 项目三:实时聊天应用
前端·react.js·架构·前端框架
阿阳微客7 小时前
Steam 搬砖项目深度拆解:从抵触到真香的转型之路
前端·笔记·学习·游戏