import { fileURLToPath, URL } from 'node:url' import { defineConfig, loadEnv } from 'vite' import vue from '@vitejs/plugin-vue' import vueDevTools from 'vite-plugin-vue-devtools' import AutoImport from 'unplugin-auto-import/vite' import Components from 'unplugin-vue-components/vite' import { ElementPlusResolver } from 'unplugin-vue-components/resolvers' // https://vite.dev/config/ export default defineConfig(({ mode }) => { const env = loadEnv(mode, process.cwd()) return { base: './', plugins: [ vue(), vueDevTools(), AutoImport({ imports: ['vue', 'vue-router', 'pinia'], resolvers: [ElementPlusResolver({ importStyle: false })], dts: 'src/types/auto-imports.d.ts', eslintrc: { enabled: true } }), Components({ resolvers: [ElementPlusResolver({ importStyle: false })], dts: 'src/types/components.d.ts' }) ], resolve: { alias: { '@': fileURLToPath(new URL('./src', import.meta.url)) } }, server: { host: '0.0.0.0', port: 5174, open: true, cors: true, proxy: { // /api → 后端 '/api': { target: env.VITE_API_BASE_URL || 'http://localhost:8080', changeOrigin: true }, // 上传文件访问 '/uploads': { target: env.VITE_API_BASE_URL || 'http://localhost:8080', changeOrigin: true }, // WebSocket 代理(客服模块用,握手阶段会带 /ws 前缀) '/ws': { target: env.VITE_API_BASE_URL || 'http://localhost:8080', changeOrigin: true, ws: true } } }, build: { target: 'es2020', outDir: 'dist', assetsDir: 'static', sourcemap: false, minify: false, chunkSizeWarningLimit: 1500, rollupOptions: { output: { manualChunks: (id: string) => { if (id.includes('node_modules')) { if (id.includes('vue') || id.includes('vue-router') || id.includes('pinia')) return 'vue' if (id.includes('element-plus') || id.includes('@element-plus/icons-vue')) return 'element' } } } } } } })