import { defineConfig, loadEnv } from 'vite' import vue from '@vitejs/plugin-vue' import { fileURLToPath, URL } from 'node:url' export default defineConfig(({ mode }) => { const env = loadEnv(mode, process.cwd(), '') const jsessionId = env.VITE_JSESSIONID || '' return { plugins: [vue()], resolve: { alias: { '@': fileURLToPath(new URL('./src', import.meta.url)) } }, server: { port: 5173, host: '0.0.0.0', proxy: { '/api': { target: 'http://localhost:8080', changeOrigin: true }, '/tba-gx': { target: 'http://infoshare.tbasw.cn', changeOrigin: true, configure: (proxy) => { proxy.on('proxyReq', (proxyReq, req, res) => { // 合并 cookie:优先使用 .env 中配置的 JSESSIONID,再带上浏览器已有的 cookie let cookies = [] if (jsessionId) { cookies.push(`JSESSIONID=${jsessionId}`) } if (req.headers.cookie) { // 排除浏览器中可能已有的 JSESSIONID(因 Domain 不同,localhost 不会有 tbasw.cn 的 cookie) const browserCookies = req.headers.cookie.split(';').map(c => c.trim()) browserCookies.forEach(c => { if (!c.startsWith('JSESSIONID=')) { cookies.push(c) } }) } if (cookies.length > 0) { proxyReq.setHeader('Cookie', cookies.join('; ')) } }) proxy.on('proxyRes', (proxyRes, req, res) => { // 重写 Set-Cookie 的 Domain,使 localhost 能保存会话 const setCookie = proxyRes.headers['set-cookie'] if (setCookie) { const rewritten = Array.isArray(setCookie) ? setCookie.map(c => c.replace(/Domain=[^;]+/gi, 'Domain=localhost')) : setCookie.replace(/Domain=[^;]+/gi, 'Domain=localhost') proxyRes.headers['set-cookie'] = rewritten } }) } } } } } })