import path from 'node:path' import { defineConfig } from 'vite' import tailwindcss from '@tailwindcss/vite' import vue from '@vitejs/plugin-vue' export default defineConfig({ plugins: [vue(), tailwindcss()], // 路径别名(和 tsconfig 保持一致) resolve: { alias: { '@': path.resolve(__dirname, 'src') } }, // 核心:build 输出配置 build: { // 1. 打包输出根目录(默认 dist),可自定义 outDir: 'dist', // 2. 静态资源(js/css/img)输出子目录(默认 assets) assetsDir: 'static', // 3. 生成的静态资源文件名是否包含哈希(用于缓存控制) assetsInlineLimit: 4096, // 小于4kb的资源内联,不生成文件 rolldownOptions: { checks: { pluginTimings: false }, // 4. 自定义入口/出口(进阶,一般无需修改) output: { // 自定义 chunk 文件名(拆分公共代码) chunkFileNames: 'static/js/[name]-[hash].js', // 自定义入口文件名 entryFileNames: 'static/js/[name]-[hash].js', // 自定义 css 文件名 assetFileNames: 'static/[ext]/[name]-[hash].[ext]', codeSplitting: { minSize: 20 * 1024, groups: [ { name: 'vendor-ag-grid', test: /node_modules[\\/](ag-grid-community|ag-grid-enterprise|ag-grid-vue3|@ag-grid-community)[\\/]/, priority: 30, entriesAware: true, maxSize: 450 * 1024 }, { name: 'vendor-vue', test: /node_modules[\\/](vue|pinia|@vue|pinia-plugin-persistedstate)[\\/]/, priority: 20 }, { name: 'vendor-ui', test: /node_modules[\\/](reka-ui|@floating-ui|lucide-vue-next|@iconify[\\/]vue)[\\/]/, priority: 10 } ] } } }, chunkSizeWarningLimit: 1800, // 5. 生产环境是否生成 sourcemap(默认 false,关闭可减小包体积) sourcemap: false, // 6. 清空输出目录(默认 true) emptyOutDir: true }, // 7. 部署的公共路径(关键!如部署到子路径 https://xxx.com/my-app/,需设为 '/my-app/') base: './' // 相对路径(推荐),或绝对路径 '/' })