Skip to content
On this page

vite-plugin-dev-mock

1、简介

为开发环境提供mock接口服务插件

详细代码:https://github.com/m-f2e/vite-plugin-dev-mock

2、安装

shell
npm install @m-f2e/vite-plugin-dev-mock -D

3、插件

ts
const VitePluginDevMock = (options?: UserOptions) => {
  let entry = options?.entry || './mock/index.js'

  // 没有绝对路径转为绝对路径
  if (!path.isAbsolute(entry)) {
    entry = path.resolve(process.cwd(), entry)
  }

  return {
    name: 'vite-plugin-dev-mock',
    apply: 'serve',
    configureServer: async (server: ViteDevServer) => {
      // 获取路由配置信息
      const mockRoutesObj = await getMockRoutesObj(entry);
      if (!mockRoutesObj) {
        return
      }
      // 生成路由映射
      generateRouteMap(mockRoutesObj)
      // 添加中间件
      server.middlewares.use((req, res, next) => {
        // 匹配路由
        const route = matchRoute(req)
        if (!route) {
          return next()
        }
        // 对匹配到的路由进行处理
        const newRes = res as MockServerResponse
        newRes.send = (body: object) => {
          let chunk: string | Buffer = JSON.stringify(body)
          if (chunk) {
            chunk = Buffer.from(chunk, 'utf-8')
            newRes.setHeader('Content-Length', chunk.length)
          }
          newRes.setHeader('Content-Type', 'application/json')
          newRes.statusCode = 200
          newRes.end(chunk)
        }
        route.handler(req, newRes)
      })
    }
  }
}

export {
  VitePluginDevMock
}

export default VitePluginDevMock

4、使用

1、配置mock数据

js
// ./mock/index.js
const apiRoutes = [
  {
    url: '/api/users',
    type: 'get',
    response: (req, res) => {
      res.send(
        [
          { id: 1, name: '张三', age: 18 },
          { id: 2, name: '李四', age: 19 },
          { id: 3, name: '王五', age: 20 },
        ]
     )
    }
  }
]

module.exports = apiRoutes

2、修改vite.config.ts

ts
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import VitePluginDevMock from '@m-f2e/vite-plugin-dev-mock'

export default defineConfig({
  plugins: [
    vue(), 
    // 默认为./mock/index.js
    VitePluginDevMock()
    // 或者自定义目录
    VitePluginDevMock({ entry: './mock/index.js' })
  ],
})

3、在浏览器中访问地址

ts
http://localhost:3000/api/users

Released under the MIT License.