在vite中使用mock

781 阅读1分钟

安装

npm i mockjs vite-plugin-mock -D

配置

如果你的vite.config.js中的plugins是个数组,那你有福了。

import { viteMockServe } from 'vite-plugin-mock'
import vue from '@vitejs/plugin-vue'

export default ({ command }: ConfigEnv): UserConfigExport => {
  return {
    plugins: [
      vue(),
      viteMockServe({
        ignore: /^_/,
        mockPath: "mock",
        localEnabled: !isBuild,
        prodEnabled: isBuild,
        injectCode: `
         import { setupProdMockServer } from '../../mock/_mockProdServer'; //后面会说这里是干嘛的
         setupProdMockServer();
        `,
      }),
    ],
  }
}

如果你的vite.config.js里的plugins不是数组,那么需要往vitePlugins里面进行push

vitePlugins.push(
    viteMockServe({
      ignore: /^_/,
      mockPath: "mock",
      localEnabled: !isBuild,
      prodEnabled: isBuild,
      injectCode: `
      import { setupProdMockServer } from '../../mock/_mockProdServer';//后面会说这里是干嘛的
      setupProdMockServer();
    `,
    })
  );

使用

在根目录下新建mock文件夹用于存放mock数据,每个模块再新建文件夹

image.png

在mock的根目录里新建 _mockProdServer.js 文件(文件名随意)。内容如下:

import { createProdMockServer } from "vite-plugin-mock/es/createProdMockServer";

// 这里可以逐一导入您的mock文件
// 也可以使用 import.meta.glob功能来进行全部导入
const modules = import.meta.globEager("./**/*.js");

const mockModules = [];
Object.keys(modules).forEach((key) => {
  if (key.includes("/_")) {
  //这个if就与mock根目录下的文件有关,排除文件名中含有"_"的文件
    return;
  }
  mockModules.push(...modules[key].default);
});
export function setupProdMockServer() {
  createProdMockServer(mockModules);
}
//这里就是vite.config.js中plugins里的viteMockServe.injectCode内容

开发时的使用

eg.在mock下新建文件夹,新建js文件。内容如下

export default [
  {
    url: '/api/get',//这里的api相当于公共请求头,根据自己的需要修改
    method: 'get',
    response: ({ query }) => {
      return {
        code: 0,
        data: {
          name: 'vben',
        },
      }
    },
  },
]

调用

export function test(params) {
  return request({
    url: "/get",
    method: "get",
    params,
  });
}

image.png

参考文献:github.com/vbenjs/vite…

同时感谢大飞哥的支持及解惑 @楚仙子ing