import { defineConfig } from "vite"; import vue from "@vitejs/plugin-vue"; import path from "path"; import viteCompression from "vite-plugin-compression"; import { ViteImageOptimizer } from "vite-plugin-image-optimizer"; import { fontConfig } from "./src/config/font"; import cesium from 'vite-plugin-cesium' export default defineConfig({ base: "/", build: { outDir: "dist", assetsDir: "assets", minify: "terser", sourcemap: false, chunkSizeWarningLimit: 1500, terserOptions: { compress: { drop_console: true, drop_debugger: true, pure_funcs: ["console.log"], }, format: { comments: /@license/i, }, }, rollupOptions: { output: { manualChunks: { vendor: ["vue", "vue-router"], }, chunkFileNames: "assets/js/[name]-[hash].js", entryFileNames: "assets/js/[name]-[hash].js", assetFileNames: "assets/[ext]/[name]-[hash].[ext]", }, }, cssCodeSplit: true, cssMinify: true, }, plugins: [ cesium(), vue(), viteCompression({ verbose: true, disable: false, threshold: 10240, algorithm: "gzip", ext: ".gz", }), ViteImageOptimizer({ test: /\.(jpe?g|png|gif|svg)$/i, exclude: undefined, include: undefined, includePublic: true, logStats: true, ansiColors: true, svg: { multipass: true, plugins: [ { name: "preset-default", params: { overrides: { removeViewBox: false, removeEmptyAttrs: false, }, }, }, ], }, png: { quality: 80, }, jpeg: { quality: 80, }, jpg: { quality: 80, }, tiff: { quality: 80, }, gif: undefined, webp: { quality: 80, }, avif: { quality: 80, }, }), ], resolve: { alias: { "@": path.resolve(__dirname, "src"), }, }, server: { host: "0.0.0.0", port: 5173, allowedHosts: ["w.godserver.cn",'godserver.cn','www.godserver.cn','rbq.college','mai.godserver.cn'], proxy: { "/api": { target: "http://127.0.0.1:8981/api", changeOrigin: true, rewrite: (path) => path.replace(/^\/api/, ''), headers: { "User-Agent": "Mozilla/5.0", "Cache-Control": "no-cache", "Pragma": "no-cache" // 移除 Accept 头部,避免覆盖客户端发送的 Accept: text/event-stream }, configure: (proxy, options) => { proxy.on('proxyReq', (proxyReq, req, res) => { // 确保不覆盖客户端的 Accept 头部 if (req.headers.accept) { proxyReq.setHeader('Accept', req.headers.accept); } }); proxy.on('proxyRes', (proxyRes, req, res) => { // 确保流式响应的头部设置正确 proxyRes.headers['Content-Type'] = 'text/event-stream'; proxyRes.headers['Cache-Control'] = 'no-cache'; proxyRes.headers['Connection'] = 'keep-alive'; proxyRes.headers['X-Accel-Buffering'] = 'no'; }); } }, }, }, define: { __VUE_OPTIONS_API__: true, __VUE_PROD_DEVTOOLS__: false, 'process.env.VITE_API_BASE_URL': JSON.stringify(process.env.VITE_API_BASE_URL), "process.env.VITE_FONT_URL": JSON.stringify(fontConfig.url), "process.env.VITE_FONT_ENABLED": JSON.stringify(fontConfig.enabled), "process.env.VITE_FONT_PRELOAD": JSON.stringify(fontConfig.preload), }, });