61 lines
1.6 KiB
JavaScript
61 lines
1.6 KiB
JavaScript
import { defineConfig } from 'vite'
|
||
import vue from '@vitejs/plugin-vue'
|
||
import { fileURLToPath, URL } from 'node:url'
|
||
|
||
// https://vitejs.dev/config/
|
||
export default defineConfig({
|
||
plugins: [
|
||
vue(),
|
||
// 修复 Vite 内部 viteTransformMiddleware 调用 decodeURI 时遇到格式错误的 URL
|
||
// 导致 "URI malformed" 错误的问题。在 Vite 中间件之前拦截并安全处理。
|
||
{
|
||
name: 'fix-uri-malformed',
|
||
configureServer(server) {
|
||
server.middlewares.use((req, res, next) => {
|
||
if (req.url) {
|
||
try {
|
||
// 预检 URL 是否可被 decodeURI 安全解码
|
||
decodeURI(req.url)
|
||
} catch (_e) {
|
||
// URL 包含无效的百分号编码序列,直接返回 400,避免进入 Vite 内部中间件
|
||
console.warn(`[fix-uri-malformed] 拦截到格式错误的请求 URL,已返回 400`)
|
||
res.statusCode = 400
|
||
res.end()
|
||
return
|
||
}
|
||
}
|
||
next()
|
||
})
|
||
},
|
||
},
|
||
],
|
||
|
||
// 开发服务器配置
|
||
server: {
|
||
host: '0.0.0.0',
|
||
port: 5173,
|
||
// 禁用 HMR 错误覆盖层,避免非致命错误(如 URI malformed)遮挡页面
|
||
hmr: {
|
||
overlay: false,
|
||
},
|
||
// 代理配置:将 /api 和 /public 请求转发到后端服务
|
||
proxy: {
|
||
'/api': {
|
||
target: 'http://127.0.0.1:7001',
|
||
changeOrigin: true,
|
||
},
|
||
'/public': {
|
||
target: 'http://127.0.0.1:7001',
|
||
changeOrigin: true,
|
||
},
|
||
},
|
||
},
|
||
|
||
// 路径别名配置
|
||
resolve: {
|
||
alias: {
|
||
'@': fileURLToPath(new URL('./src', import.meta.url)),
|
||
},
|
||
},
|
||
})
|