1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
| import { defineConfig, loadEnv } from 'vite'; import react from '@vitejs/plugin-react'; import { resolve } from 'path';
const baseConfig = { plugins: [react()], resolve: { alias: { '@': resolve(__dirname, './src'), '@assets': resolve(__dirname, './src/assets'), '@components': resolve(__dirname, './src/components'), '@utils': resolve(__dirname, './src/utils'), '@hooks': resolve(__dirname, './src/hooks'), '@store': resolve(__dirname, './src/store'), '@services': resolve(__dirname, './src/services'), }, }, };
export default defineConfig(({ mode }) => { const env = loadEnv(mode, process.cwd(), '');
return { ...baseConfig,
define: { __APP_VERSION__: JSON.stringify(process.env.npm_package_version), __BUILD_TIME__: JSON.stringify(new Date().toISOString()), },
server: { port: Number(env.VITE_PORT) || 3000, open: env.VITE_OPEN === 'true', proxy: createProxyConfig(env), },
preview: { port: Number(env.VITE_PREVIEW_PORT) || 8080, },
build: { outDir: env.VITE_BUILD_DIR || 'dist', assetsDir: env.VITE_ASSETS_DIR || 'assets',
rollupOptions: { output: { assetFileNames: (assetInfo) => { let extType = assetInfo.name.split('.').at(1); if (/png|jpe?g|gif|svg|webp|avif/.test(extType)) { extType = 'img'; } else if (/woff2?|eot|ttf|otf/.test(extType)) { extType = 'fonts'; } return `${extType}/[name]-[hash][extname]`; }, }, }, },
optimizeDeps: { include: ['react', 'react-dom', 'react-router-dom'], }, }; });
function createProxyConfig(env) { const proxy = {};
if (env.VITE_API_PROXY_TARGET) { proxy['/api'] = { target: env.VITE_API_PROXY_TARGET, changeOrigin: true, secure: false, }; }
return proxy; }
|