前言
前后端分离前端需要数据可以使用Mock,更加方便,故学习
vite-plugin-mock
开始
注意:当前是3.0.0版本,目前发现修改mock文件会生成很多个xxx.mjs文件,控制台不停报错,issue,关注是否已经解决
安装 (yarn or npm)
1 2 3 4 5
   | yarn add mockjs # or npm i  mockjs -S # or pnpm add mockjs
   | 
 
and
1 2 3 4 5
   | yarn add vite-plugin-mock -D # or npm i vite-plugin-mock -D # or pnpm add vite-plugin-mock -D
   | 
 
开发环境使用
开发环境是使用 Connect 中间件实现的。
与生产环境不同,您可以在 Google Chrome 控制台中查看网络请求记录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
   |  import { UserConfigExport, ConfigEnv } from 'vite' import vue from '@vitejs/plugin-vue' import { viteMockServe } from 'vite-plugin-mock' export default ({ command }: ConfigEnv): UserConfigExport => {   return {     plugins: [       vue(),       viteMockServe({         mockPath: './src/mock',         enable: true,       }),     ],   } }
 
  | 
 
1 2 3 4 5 6 7 8 9 10
   |  {     mockPath?: string;     ignore?: RegExp | ((fileName: string) => boolean);     watchFiles?: boolean;     enable?: boolean;     ignoreFiles?: string[];     configPath?: string;     logger?:boolean; }
 
  | 
 
mockPath
  type: string
  default: mock
  设置模拟.ts 文件的存储文件夹
  如果watchFiles:true,将监视文件夹中的文件更改。 并实时同步到请求结果
  如果 configPath 具有值,则无效 
ignore
  type: RegExp | ((fileName: string) => boolean);
  default: undefined
  自动读取模拟.ts 文件时,请忽略指定格式的文件 
watchFiles
  type: boolean
  default: true
  设置是否监视mockPath对应的文件夹内文件中的更改 
enable
  type: boolean
  default: true
  是否启用 mock 功能 
configPath
  type: string
  default: vite.mock.config.ts
  设置模拟读取的数据条目。 当文件存在并且位于项目根目录中时,将首先读取并使用该文件。 配置文件返回一个数组 
logger
  type: boolean
  default: true
  是否在控制台显示请求日志 
Mock实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
   |   import { MockMethod, MockConfig } from 'vite-plugin-mock'
 
  export default [   {     url: '/api/get',     method: 'get',     response: ({ query }) => {       return {         code: 0,         data: {           name: 'vben',         },       }     },   },   {     url: '/api/post',     method: 'post',     timeout: 2000,     response: {       code: 0,       data: {         name: 'vben',       },     },   },   {     url: '/api/text',     method: 'post',     rawResponse: async (req, res) => {       let reqbody = ''       await new Promise((resolve) => {         req.on('data', (chunk) => {           reqbody += chunk         })         req.on('end', () => resolve(undefined))       })       res.setHeader('Content-Type', 'text/plain')       res.statusCode = 200       res.end(`hello, ${reqbody}`)     },   }, ] as MockMethod[]
  export default function (config: MockConfig) {   return [     {       url: '/api/text',       method: 'post',       rawResponse: async (req, res) => {         let reqbody = ''         await new Promise((resolve) => {           req.on('data', (chunk) => {             reqbody += chunk           })           req.on('end', () => resolve(undefined))         })         res.setHeader('Content-Type', 'text/plain')         res.statusCode = 200         res.end(`hello, ${reqbody}`)       },     },   ] }
 
   | 
 
Mock配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
   | {      url: string;      method?: MethodType;      timeout?: number;      statusCode?:number;      response?: ((opt: { [key: string]: string; body: Record<string,any>; query:  Record<string,any>, headers: Record<string, any>; }) => any) | any;      rawResponse?: (req: IncomingMessage, res: ServerResponse) => void; }
 
  | 
 
生产环境中的使用
创建mockProdServer.ts文件
1 2 3 4 5 6 7 8 9 10 11
   |  import { createProdMockServer } from 'vite-plugin-mock/client'
 
 
 
  import testModule from '../mock/test'
  export function setupProdMockServer() {   createProdMockServer([...testModule]) }
 
  | 
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14
   |  import { viteMockServe } from 'vite-plugin-mock' import { UserConfigExport, ConfigEnv } from 'vite' export default ({ command }: ConfigEnv): UserConfigExport => {   return {     plugins: [       viteMockServe({         mockPath: 'mock',                  enable: true,       }),     ],   } }
 
  | 
 
加餐
如何运行打包好的dist文件
1 2 3 4
   | npm install -g http-server cd dist # 启动http-server。在命令行中执行以下命令: http-server
   | 
 
此时,在命令行中会输出生成的服务网站
注意。默认网址端口号是8080,如果已经被占用可使用 http-server -p 8081 来修改端口