vite.config.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import { defineConfig, loadEnv } from 'vite'
  2. import vue from '@vitejs/plugin-vue'
  3. import { fileURLToPath, URL } from 'node:url'
  4. export default defineConfig(({ mode }) => {
  5. const env = loadEnv(mode, process.cwd(), '')
  6. const jsessionId = env.VITE_JSESSIONID || ''
  7. return {
  8. plugins: [vue()],
  9. resolve: {
  10. alias: {
  11. '@': fileURLToPath(new URL('./src', import.meta.url))
  12. }
  13. },
  14. server: {
  15. port: 5173,
  16. host: '0.0.0.0',
  17. proxy: {
  18. '/api': {
  19. target: 'http://localhost:8080',
  20. changeOrigin: true
  21. },
  22. '/tba-gx': {
  23. target: 'http://infoshare.tbasw.cn',
  24. changeOrigin: true,
  25. configure: (proxy) => {
  26. proxy.on('proxyReq', (proxyReq, req, res) => {
  27. // 合并 cookie:优先使用 .env 中配置的 JSESSIONID,再带上浏览器已有的 cookie
  28. let cookies = []
  29. if (jsessionId) {
  30. cookies.push(`JSESSIONID=${jsessionId}`)
  31. }
  32. if (req.headers.cookie) {
  33. // 排除浏览器中可能已有的 JSESSIONID(因 Domain 不同,localhost 不会有 tbasw.cn 的 cookie)
  34. const browserCookies = req.headers.cookie.split(';').map(c => c.trim())
  35. browserCookies.forEach(c => {
  36. if (!c.startsWith('JSESSIONID=')) {
  37. cookies.push(c)
  38. }
  39. })
  40. }
  41. if (cookies.length > 0) {
  42. proxyReq.setHeader('Cookie', cookies.join('; '))
  43. }
  44. })
  45. proxy.on('proxyRes', (proxyRes, req, res) => {
  46. // 重写 Set-Cookie 的 Domain,使 localhost 能保存会话
  47. const setCookie = proxyRes.headers['set-cookie']
  48. if (setCookie) {
  49. const rewritten = Array.isArray(setCookie)
  50. ? setCookie.map(c => c.replace(/Domain=[^;]+/gi, 'Domain=localhost'))
  51. : setCookie.replace(/Domain=[^;]+/gi, 'Domain=localhost')
  52. proxyRes.headers['set-cookie'] = rewritten
  53. }
  54. })
  55. }
  56. }
  57. }
  58. }
  59. }
  60. })