本文已参与「新人创作礼」活动,一起开启掘金创作之路。
前言
本章讲解
Mock
在Vite中的配置,Mock.js可以生成随机数据,拦截Ajax请求,前后端分离让前端攻城师独立于后端进行开发。 增加单元测试的真实性 通过随机数据,模拟各种场景。
推荐阅读
vite.config.ts 之 Plugins 篇 (十)
vite-plugin-mock
# 选择一个你喜欢的包管理器
# NPM
npm install mockjs -S
npm install vite-plugin-mock -D
# Yarn
yarn add mockjs -S
yarn add vite-plugin-mock -D
# PNPM
pnpm install mockjs -S
pnpm install vite-plugin-mock -D
- 配置
plugins
目录下创建mock.ts
文件配置如下:
// mock.ts
import { viteMockServe } from 'vite-plugin-mock'
export function configMockPlugin(isBuild: boolean) {
return viteMockServe({
mockPath: 'mock',
localEnabled: !isBuild,
prodEnabled: isBuild,
logger: true,
})
}
mockPath
指定mock目录
- 添加配置
import vue from '@vitejs/plugin-vue'
import vueSetupExtend from 'vite-plugin-vue-setup-extend'
import legacy from '@vitejs/plugin-legacy'
import OptimizationPersist from 'vite-plugin-optimize-persist'
import PkgConfig from 'vite-plugin-package-config'
import { configMockPlugin } from './mock'
import { configCompressPlugin } from './compress'
import { configImageminPlugin } from './imagemin'
import { configStyleImportPlugin } from './style'
import {
configAutoImportPlugin,
configVueComponentsPlugin,
configVueIconsPlugin,
configVuePurgeIconsPlugin,
} from './unplugin'
export function createVitePlugins(viteEnv: ViteEnv, isBuild: boolean) {
const {
VITE_USE_IMAGEMIN,
VITE_USE_COMPRESS,
VITE_COMPRESS_DELETE_ORIGIN_FILE,
VITE_USE_MOCK,
VITE_LEGACY,
} = viteEnv
const plugins = [vue(), vueSetupExtend(), PkgConfig(), OptimizationPersist()]
// vite-plugin-mock
VITE_USE_MOCK && plugins.push(configMockPlugin(isBuild))
// 是否为打包后的文件提供传统浏览器兼容性支持
VITE_LEGACY &&
plugins.push(
legacy({
targets: ['ie >= 11'],
additionalLegacyPolyfills: ['regenerator-runtime/runtime'],
})
)
if (isBuild) {
// vite-plugin-compress
VITE_USE_COMPRESS && plugins.push(configCompressPlugin(VITE_COMPRESS_DELETE_ORIGIN_FILE))
// vite-plugin-imagemin
VITE_USE_IMAGEMIN && plugins.push(configImageminPlugin())
}
// unplugin-auto-import
plugins.push(configAutoImportPlugin())
// unplugin-vue-components
plugins.push(configVueComponentsPlugin())
// vite-plugin-style-import
plugins.push(configStyleImportPlugin())
// unplugin-icons
plugins.push(configVueIconsPlugin())
// vite-plugin-purge-icons
plugins.push(configVuePurgeIconsPlugin())
return plugins
}
- 使用
在根目录中创建
mock
文件夹,在文件夹下创建user.ts文件mockjs
使用方法如下:
const { Random } = require('mockjs')
import { MockMethod } from 'vite-plugin-mock'
const tokens: any = {
admin: `admin-token-${Random.guid()}-${new Date().getTime()}`,
editor: `editor-token-${Random.guid()}-${new Date().getTime()}`,
test: `test-token-${Random.guid()}-${new Date().getTime()}`,
}
const username2role: any = {
admin: ['Admin'],
editor: ['Editor'],
test: ['Admin', 'Editor'],
}
const role2permission: any = {
Admin: ['read:system', 'write:system', 'delete:system'],
Editor: ['read:system', 'write:system'],
Test: ['read:system'],
}
export default [
{
url: '/system/login',
timeout: 200,
method: 'POST',
response: ({ body }: any) => {
const { username } = body
const token = tokens[username]
if (!token)
return {
code: 500,
msg: '帐户或密码不正确',
}
return {
code: 200,
msg: 'success',
data: { token },
}
},
},
{
url: '/system/logout',
timeout: 200,
method: 'get',
response() {
return {
code: 200,
msg: 'success',
}
},
},
{
url: '/system/user/getUserInfo',
method: 'get',
response: (config: any) => {
const authorization = config.headers.authorization || config.headers.Authorization
if (!authorization.startsWith('Bearer '))
return {
code: 401,
msg: '令牌无效',
}
const username = authorization.replace('Bearer ', '').split('-token-')[0]
const roles = username2role[username] || []
const permissions = [...new Set(roles.flatMap((role: any) => role2permission[role]))]
return {
code: 200,
msg: 'success',
data: {
username,
roles,
permissions,
avatar: 'https://p3-passport.byteacctimg.com/img/user-avatar/44534828b73a60680508a3de7a8750d2~300x300.image',
},
}
},
},
] as MockMethod[]
在后面章节中会使用Axios请求访问Mock
继续学习
废话只说一句:码字不易求个👍,收藏 === 学会,快行动起来吧!🙇🙇🙇。