import vue from "@vitejs/plugin-vue"; import { defineConfig } from "vite"; import { VitePWA } from "vite-plugin-pwa"; export default defineConfig({ plugins: [ vue(), VitePWA({ // E2E 跑产物时关闭 Service Worker,避免缓存干扰断言 disable: process.env.DISABLE_PWA === "1", registerType: "autoUpdate", manifest: { name: "漂流瓶 · 深海回声", short_name: "漂流瓶", description: "匿名漂流瓶社交 PWA", theme_color: "#061b2b", background_color: "#04111d", display: "standalone", start_url: "/", icons: [ { src: "/icon.svg", sizes: "any", type: "image/svg+xml", purpose: "any maskable", }, ], }, workbox: { navigateFallback: "/index.html", runtimeCaching: [] }, }), ], server: { proxy: { "/api": { target: "http://127.0.0.1:3000", changeOrigin: true, headers: { Origin: "http://127.0.0.1:5173" }, }, "/socket.io": { target: "http://127.0.0.1:3000", ws: true, headers: { Origin: "http://127.0.0.1:5173" }, }, }, }, // E2E 跑产物预览时同样需要把 /api 与 /socket.io 代理到 API, // 并由代理注入 Origin,满足 StateChangingOriginGuard 的校验。 preview: { proxy: { "/api": { target: "http://127.0.0.1:3000", changeOrigin: true, headers: { Origin: "http://127.0.0.1:5173" }, }, "/socket.io": { target: "http://127.0.0.1:3000", ws: true, headers: { Origin: "http://127.0.0.1:5173" }, }, }, }, });