前言
前后端分离前端需要数据可以使用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
来修改端口