Files
udmin/frontend/vite.config.ts
ayou 7637a5c225 fix(proxy): 更新预览端口并优化SSE和WS代理配置
- 将预览端口从5173改为8888以避免冲突
- 重构SSE代理配置,简化逻辑并修复连接问题
- 新增WS代理路径,支持WebSocket独立代理
2025-09-21 23:36:23 +08:00

81 lines
3.2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { defineConfig, loadEnv } from 'vite'
import react from '@vitejs/plugin-react'
// 单一配置文件 + 多环境 .env
// - .env.development / .env.production / .env.staging 中配置变量
// - 通过 loadEnv 读取并应用到开发服务器与代理
export default defineConfig(({ mode }) => {
const env = loadEnv(mode, '.', '')
const port = Number(env.VITE_PORT || 5173)
const open = String(env.VITE_OPEN ?? 'true').toLowerCase() === 'true' || env.VITE_OPEN === '1'
const proxyTarget = env.VITE_ADMIN_PROXY_PATH || 'http://127.0.0.1:9898'
return {
plugins: [
react({
babel: {
plugins: [
['@babel/plugin-proposal-decorators', { legacy: true }],
['babel-plugin-transform-typescript-metadata'],
['@babel/plugin-proposal-class-properties', { loose: true }],
['@babel/plugin-proposal-private-methods', { loose: true }],
['@babel/plugin-proposal-private-property-in-object', { loose: true }]
]
}
})
],
server: {
port,
open,
proxy: {
'/api': {
target: proxyTarget,
changeOrigin: true,
ws: true,
},
'/sse': {
target: 'http://127.0.0.1:8866',
changeOrigin: true,
ws: false,
proxyTimeout: 0,
timeout: 0,
headers: { 'Connection': 'keep-alive' },
rewrite: (path: string) => path.replace(/^\/sse/, '/api'),
configure: (proxy: any) => {
proxy.on('proxyReq', (proxyReq: any) => {
try {
if (typeof proxyReq.removeHeader === 'function') proxyReq.removeHeader('accept-encoding')
proxyReq.setHeader('accept', 'text/event-stream')
proxyReq.setHeader('connection', 'keep-alive')
} catch {}
})
proxy.on('proxyRes', (proxyRes: any, _req: any, res: any) => {
try {
proxyRes.headers['content-type'] = 'text/event-stream; charset=utf-8'
proxyRes.headers['cache-control'] = 'no-cache'
proxyRes.headers['pragma'] = 'no-cache'
proxyRes.headers['x-accel-buffering'] = 'no'
delete proxyRes.headers['content-length']
delete proxyRes.headers['content-encoding']
res.setHeader('Content-Type', 'text/event-stream; charset=utf-8')
res.setHeader('Cache-Control', 'no-cache')
res.setHeader('Pragma', 'no-cache')
res.setHeader('X-Accel-Buffering', 'no')
if (typeof res.removeHeader === 'function') res.removeHeader('Content-Length')
if (typeof res.removeHeader === 'function') res.removeHeader('Content-Encoding')
if (typeof res.flushHeaders === 'function') res.flushHeaders()
} catch {}
})
}
},
// 新增WS 独立代理前缀,将 /ws/* 重写到后端 8855 的 /api/*(握手走 WS
'/ws': {
target: 'http://127.0.0.1:8855',
changeOrigin: true,
ws: true,
rewrite: (path: string) => path.replace(/^\/ws/, '/api'),
}
}
}
}
})