import tailwindcss from '@tailwindcss/vite'; import react from '@vitejs/plugin-react'; import path, { resolve } from 'path'; import { defineConfig, loadEnv } from 'vite'; import cesiumPlugin from 'vite-plugin-cesium'; import { viteStaticCopy } from "vite-plugin-static-copy"; // ============================================================ // Vite 配置 - 性能优化版 // - 代码分包 (manualChunks) // - gzip 压缩 // - 路径别名 // - CSS 代码分割 // ============================================================ const ENV = { DEV: 'development', PROD: 'production' }; export default defineConfig(({ mode }) => { const env = loadEnv(mode, '.', ''); return { define: { 'process.env': {} }, plugins: [ react(), tailwindcss(), cesiumPlugin(), viteStaticCopy({ targets: [ { src: "node_modules/cesium/Build/Cesium", dest: "" } ] }) ], resolve: { alias: { '@': resolve('src'), }, }, // ---- 性能优化构建配置 ---- build: { // 启用 CSS 代码分割(避免样式重复打包) cssCodeSplit: true, // 生成 sourcemap(生产可关闭) sourcemap: false, // chunk 大小警告阈值 chunkSizeWarningLimit: 1000, // KB rollupOptions: { output: { // ---- 手动分包策略 ---- //manualChunks(id) { // // 1. 将 React 生态单独打包(利用浏览器缓存) // if (id.includes('node_modules/react') || id.includes('node_modules/react-dom')) { // return 'react-vendor'; // } // // 2. Ant Design 单独打包 // if (id.includes('node_modules/antd') || id.includes('node_modules/@ant-design')) { // return 'antd-vendor'; // } // // 3. Cesium 单独打包(体积巨大) // if (id.includes('node_modules/cesium') || id.includes('cesium')) { // return 'cesium-vendor'; // } // // 4. 其他 node_modules 合并 // if (id.includes('node_modules')) { // return 'vendor'; // } //}, }, }, }, define: { // Cesium 路径注入 CESIUM_BASE_URL: JSON.stringify( '/Cesium' ), // 环境变量注入 'import.meta.env.VITE_API_BASE_URL': JSON.stringify(env.VITE_API_BASE_URL ?? env.baseURL ?? ''), }, server: { port: 5173, // HMR hmr: process.env.DISABLE_HMR !== 'true', }, // ---- 优化用户体验 ---- esbuild: { // 日志中排除特定的包警告 logOverride: { 'this-is-undefined-in-esm': 'silent' }, }, }; });