import { fileURLToPath, URL } from 'node:url' import { resolve } from 'node:path' import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' import AutoImport from 'unplugin-auto-import/vite' import Components from 'unplugin-vue-components/vite' import { ElementPlusResolver } from 'unplugin-vue-components/resolvers' export default defineConfig({ base: '/', plugins: [ vue(), AutoImport({ imports: ['vue', 'vue-router'], resolvers: [ElementPlusResolver()], dts: 'auto-imports.d.ts', vueTemplate: true, }), Components({ resolvers: [ElementPlusResolver()], dts: 'components.d.ts', }), ], resolve: { alias: { '@': fileURLToPath(new URL('./src', import.meta.url)), }, }, server: { port: 5173, proxy: { '/newApi/api': { target: process.env.VITE_API_TARGET || 'http://127.0.0.1:18080/', changeOrigin: true, rewrite: (path) => path.replace(/^\/newApi/, ''), }, // /login、/check_login、/logout 等无 /api 前缀的 Java 接口(登录/用户信息) '/newApi/login': { target: process.env.VITE_API_TARGET || 'http://127.0.0.1:18080/', changeOrigin: true, rewrite: (path) => path.replace(/^\/newApi/, ''), }, '/newApi/check_login': { target: process.env.VITE_API_TARGET || 'http://127.0.0.1:18080/', changeOrigin: true, rewrite: (path) => path.replace(/^\/newApi/, ''), }, }, }, build: { outDir: 'new_web_source', emptyOutDir: true, cssCodeSplit: true, rollupOptions: { // SPA 单入口(2026-09-08):原 22 个 MPA 入口已合并为 index.html + 路由 input: resolve(__dirname, 'index.html'), output: { // 入口文件同样带内容 hash:/assets/ 静态服务配了 immutable 长缓存, // 无 hash 的入口文件会导致前端更新对用户永不生效(旧文件名被永久缓存) entryFileNames: 'assets/[name]-[hash].js', chunkFileNames: 'assets/[name]-[hash].js', assetFileNames: 'assets/[name]-[hash][extname]', }, }, }, })