import { type ConfigEnv, loadEnv, type UserConfigExport } from 'vite'; import { exclude, include } from './build/optimize'; import { getPluginsList } from './build/plugins'; import { __APP_INFO__, alias, pathResolve, root, wrapperEnv } from './build/utils'; export default ({ mode }: ConfigEnv): UserConfigExport => { const { VITE_CDN, VITE_PORT, VITE_COMPRESSION, VITE_PUBLIC_PATH } = wrapperEnv(loadEnv(mode, root)); return { base: VITE_PUBLIC_PATH, root, resolve: { alias, }, // 服务端渲染 server: { // 端口号 port: VITE_PORT, host: '0.0.0.0', // 本地跨域代理 https://cn.vitejs.dev/config/server-options.html#server-proxy proxy: { '/api/v1/': { target: 'http://129.211.31.58:3000', changeOrigin: true, }, '/api': { target: 'http://localhost:7070', changeOrigin: true, rewrite: (path: string) => path.replace(/^\/api/, '/api'), }, }, // 预热文件以提前转换和缓存结果,降低启动期间的初始页面加载时长并防止转换瀑布 warmup: { clientFiles: ['./index.html', './src/{views,components}/*'], }, }, plugins: getPluginsList(VITE_CDN, VITE_COMPRESSION, VITE_PORT), // https://cn.vitejs.dev/config/dep-optimization-options.html#dep-optimization-options optimizeDeps: { include, exclude, }, build: { outDir: 'docker/dist', // https://cn.vitejs.dev/guide/build.html#browser-compatibility target: 'es2015', sourcemap: false, // 消除打包大小超过500kb警告 chunkSizeWarningLimit: 4000, rollupOptions: { input: { index: pathResolve('./index.html', import.meta.url), }, // 静态资源分类打包 output: { chunkFileNames: 'static/js/[name]-[hash].js', entryFileNames: 'static/js/[name]-[hash].js', assetFileNames: 'static/[ext]/[name]-[hash].[ext]', }, }, }, define: { __INTLIFY_PROD_DEVTOOLS__: false, __APP_INFO__: JSON.stringify(__APP_INFO__), }, }; };