import { defineConfig, loadEnv } from 'vite' import vue from '@vitejs/plugin-vue' import { resolve } from 'path' import AutoImport from 'unplugin-auto-import/vite' import Components from 'unplugin-vue-components/vite' import { ElementPlusResolver } from 'unplugin-vue-components/resolvers' // https://vitejs.dev/config/ export default defineConfig(({ mode }) => { const env = loadEnv(mode, process.cwd(), '') return { plugins: [ vue(), AutoImport({ imports: ['vue', 'vue-router', 'pinia'], resolvers: [ElementPlusResolver()], dts: true, eslintrc: { enabled: true } }), Components({ resolvers: [ElementPlusResolver()], dts: true }) ], resolve: { alias: { '@': resolve(__dirname, 'src'), '@/components': resolve(__dirname, 'src/components'), '@/views': resolve(__dirname, 'src/views'), '@/utils': resolve(__dirname, 'src/utils'), '@/api': resolve(__dirname, 'src/api'), '@/stores': resolve(__dirname, 'src/stores'), '@/router': resolve(__dirname, 'src/router'), '@/types': resolve(__dirname, 'src/types'), '@/assets': resolve(__dirname, 'src/assets') } }, server: { host: '0.0.0.0', port: 3000, open: true, proxy: { '/api': { target: env.VITE_API_BASE_URL || 'http://localhost:3001', changeOrigin: true, rewrite: (path) => path.replace(/^\/api/, '') } } }, build: { target: 'es2015', outDir: 'dist', assetsDir: 'assets', sourcemap: mode === 'development', rollupOptions: { output: { chunkFileNames: 'js/[name]-[hash].js', entryFileNames: 'js/[name]-[hash].js', assetFileNames: (assetInfo) => { if (assetInfo.name?.endsWith('.css')) { return 'css/[name]-[hash].css' } return 'assets/[name]-[hash].[ext]' }, manualChunks: { 'vue-vendor': ['vue', 'vue-router', 'pinia'], 'element-plus': ['element-plus', '@element-plus/icons-vue'], 'utils': ['axios', 'nprogress'] } } }, terserOptions: { compress: { drop_console: mode === 'production', drop_debugger: mode === 'production' } } }, optimizeDeps: { include: ['vue', 'vue-router', 'pinia', 'element-plus', 'axios'] }, define: { __VUE_OPTIONS_API__: false, __VUE_PROD_DEVTOOLS__: false }, css: { preprocessorOptions: { scss: { additionalData: `@import "@/style/variables.scss"; @import "@/style/mixins.scss";` } } } } })