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();
}
相关推荐
ZJ_.6 分钟前
WPSJS:让 WPS 办公与 JavaScript 完美联动
开发语言·前端·javascript·vscode·ecmascript·wps
GIS开发特训营11 分钟前
Vue零基础教程|从前端框架到GIS开发系列课程(七)响应式系统介绍
前端·vue.js·前端框架·gis开发·webgis·三维gis
Cachel wood37 分钟前
python round四舍五入和decimal库精确四舍五入
java·linux·前端·数据库·vue.js·python·前端框架
学代码的小前端38 分钟前
0基础学前端-----CSS DAY9
前端·css
joan_8542 分钟前
layui表格templet图片渲染--模板字符串和字符串拼接
前端·javascript·layui
m0_748236111 小时前
Calcite Web 项目常见问题解决方案
开发语言·前端·rust
Watermelo6171 小时前
详解js柯里化原理及用法,探究柯里化在Redux Selector 的场景模拟、构建复杂的数据流管道、优化深度嵌套函数中的精妙应用
开发语言·前端·javascript·算法·数据挖掘·数据分析·ecmascript
m0_748248941 小时前
HTML5系列(11)-- Web 无障碍开发指南
前端·html·html5
m0_748235612 小时前
从零开始学前端之HTML(三)
前端·html
一个处女座的程序猿O(∩_∩)O4 小时前
小型 Vue 项目,该不该用 Pinia 、Vuex呢?
前端·javascript·vue.js