import vue from '@vitejs/plugin-vue'; import { resolve } from 'path'; import type { UserConfig, ConfigEnv } from 'vite'; import { defineConfig } from 'vite'; import { loadEnv } from './src/utils/viteBuild'; const pathResolve = (dir: string): any => { return resolve(__dirname, '.', dir); }; const { VITE_PORT, VITE_OPEN, VITE_PUBLIC_PATH } = loadEnv(); const alias: Record = { '/@': pathResolve('./src/'), 'vue-i18n': 'vue-i18n/dist/vue-i18n.cjs.js', }; export default defineConfig(({ command }: ConfigEnv): UserConfig => { return { plugins: [vue()], root: process.cwd(), resolve: { alias }, base: command === 'build' ? VITE_PUBLIC_PATH : './', optimizeDeps: { include: ['element-plus/lib/locale/lang/zh-cn', 'element-plus/lib/locale/lang/en', 'element-plus/lib/locale/lang/zh-tw'], }, server: { host: '0.0.0.0', port: VITE_PORT, open: VITE_OPEN, proxy: { '/gitee': { target: 'https://gitee.com', ws: true, changeOrigin: true, rewrite: (path) => path.replace(/^\/gitee/, ''), }, }, }, build: { outDir: 'dist', sourcemap: false, chunkSizeWarningLimit: 1500, rollupOptions: { output: { entryFileNames: `assets/[name].${new Date().getTime()}.js`, chunkFileNames: `assets/[name].${new Date().getTime()}.js`, assetFileNames: `assets/[name].${new Date().getTime()}.[ext]`, compact: true, manualChunks: { vue: ['vue', 'vue-router', 'vuex'], echarts: ['echarts'], }, }, }, terserOptions: { compress: { drop_console: true, drop_debugger: true, }, ie8: true, output: { comments: true, }, }, }, css: { postcss: { plugins: [ { postcssPlugin: 'internal:charset-removal', AtRule: { charset: (atRule) => { if (atRule.name === 'charset') { atRule.remove(); } }, }, }, ], }, }, define: { __VUE_I18N_LEGACY_API__: JSON.stringify(false), __VUE_I18N_FULL_INSTALL__: JSON.stringify(false), __INTLIFY_PROD_DEVTOOLS__: JSON.stringify(false), }, }; });