import {defineConfig} from 'vite' import vue from '@vitejs/plugin-vue' import {resolve} from "path"; import config from "./src/config"; //import {chunkSplitPlugin} from 'vite-plugin-chunk-split'; // https://vitejs.dev/config/ export default defineConfig({ css: { extract: true, preprocessorOptions: { scss: { additionalData: `@import "./src/styles/app/_var.scss";` } } }, resolve: { alias: { '~src': `${resolve(__dirname, './src')}`, '~ass': resolve(__dirname, './src/assets'), '~com': `${resolve(__dirname, './src/components')}`, '~api': resolve(__dirname, './src/api/modules'), '~sto': resolve(__dirname, './src/store/modules'), '~uti': resolve(__dirname, './src/utils') } }, plugins: [ vue(), /*chunkSplitPlugin({ strategy: 'unbundle' }),*/ ], build: { cssCodeSplit: true, rollupOptions: { output: { manualChunks(id) { if (id.includes('node_modules')) { const arr = id.toString().split('node_modules/')[1].split('/') switch(arr[0]) { case '@vue': case 'remixicon': case 'tailwindcss': case 'element-plus': case 'z-element-plus': return '_' + arr[0] break default : return '__vendor' break } } }, chunkFileNames: 'static/js1/[name]-[hash].js', entryFileNames: 'static/js2/[name]-[hash].js', assetFileNames: 'static/[ext]/[name]-[hash].[ext]' }, brotliSize: false, // 不统计 target: 'esnext', minify: 'esbuild' // 混淆器,terser构建后文件体积更小 } }, server: { ...config.vite, proxy: { '/api': { ws: true, changeOrigin: true, target: config.target, rewrite: (path) => path.replace(new RegExp('^/api'), '/'), } } }, })