import {fileURLToPath, URL} from 'node:url' import {defineConfig} from 'vite' import vue from '@vitejs/plugin-vue' import Icons from 'unplugin-icons/vite' import IconsResolver from 'unplugin-icons/resolver' 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' import {loadEnv} from 'vite' // https://vite.dev/config/ export default defineConfig(({mode, command}) => { const env = loadEnv(mode, process.cwd()) const {VITE_APP_ENV, VITE_APP_BASE_URL, VITE_APP_BASE_URL_WS} = env return { base: VITE_APP_ENV === 'production' ? '/' : '/', plugins: [ vue(), vueDevTools(), AutoImport({ imports: ['vue'], resolvers: [ ElementPlusResolver(), IconsResolver({ prefix: 'Icon', }), ], }), Components({ resolvers: [ IconsResolver({ enabledCollections: ['ep'], }), ElementPlusResolver(), ], }), Icons({ autoInstall: true, }), ], resolve: { alias: { '@': fileURLToPath(new URL('./src', import.meta.url)) }, }, // vite 相关配置 server: { port: 5174, host: true, open: false, proxy: { // https://cn.vitejs.dev/config/#server-proxy '/api': { target: VITE_APP_BASE_URL, changeOrigin: true, rewrite: (p) => p.replace(/^\/api/, ''), }, // '/dev-ws': { // target: VITE_APP_BASE_URL_WS, // changeOrigin: true, // rewrite: (p) => p.replace(/^\/dev-ws/, ''), // ws: true // } } }, css: { //fix Deprecation Warning: The legacy JS API is deprecated and will be removed in Dart Sass 2.0.0. preprocessorOptions: { scss: { api: 'modern-compiler', } }, postcss: { plugins: [ { postcssPlugin: 'internal:charset-removal', AtRule: { charset: (atRule) => { if (atRule.name === 'charset') { atRule.remove(); } } } } ] } }, build: { outDir: '../admin/ui/static', assetsDir: '../admin/ui/assets', // 代码分割配置 rollupOptions: { output: { manualChunks(id) { if (id.includes('node_modules')) { return 'vendor' } }, chunkFileNames: 'static/js/[name]-[hash].js', entryFileNames: 'static/js/[name]-[hash].js', assetFileNames: 'static/[ext]/[name]-[hash].[ext]' } }, minify: "terser", terserOptions: { compress: { //生产环境时移除console drop_console: true, drop_debugger: true, }, }, } } })