Files
MyClub/frontend/vite.config.ts
T
Tomas Dvorak 30d70a6aeb update
2026-03-13 14:34:19 +01:00

103 lines
2.5 KiB
TypeScript

import path from 'node:path';
import { URL } from 'node:url';
import { defineConfig, loadEnv } from 'vite';
import react from '@vitejs/plugin-react';
function resolveBackendOrigin(env: Record<string, string>) {
const raw = env.REACT_APP_API_BASE_URL || env.REACT_APP_API_URL || '';
const fallback = 'http://127.0.0.1:8080';
try {
if (!raw || raw.startsWith('/')) {
return fallback;
}
const parsed = new URL(raw);
parsed.pathname = '/';
parsed.search = '';
parsed.hash = '';
return parsed.toString();
} catch {
return fallback;
}
}
function buildProcessEnv(mode: string, env: Record<string, string>, base: string) {
const processEnv: Record<string, string> = {
NODE_ENV: mode === 'production' ? 'production' : mode,
PUBLIC_URL: base === '/' ? '' : base.replace(/\/$/, ''),
};
for (const [key, value] of Object.entries(env)) {
if (key.startsWith('REACT_APP_')) {
processEnv[key] = value;
}
}
return processEnv;
}
export default defineConfig(({ mode }) => {
const env = loadEnv(mode, process.cwd(), '');
const base = env.PUBLIC_URL ? (env.PUBLIC_URL.endsWith('/') ? env.PUBLIC_URL : `${env.PUBLIC_URL}/`) : '/';
const backendOrigin = resolveBackendOrigin(env);
const processEnv = buildProcessEnv(mode, env, base);
const commonProxy = {
target: backendOrigin,
changeOrigin: true,
secure: false,
};
return {
base,
publicDir: 'public',
plugins: [react()],
resolve: {
alias: {
'@': path.resolve(__dirname, 'src'),
},
},
define: {
'process.env': JSON.stringify(processEnv),
global: 'globalThis',
},
build: {
outDir: 'build',
assetsDir: 'static',
emptyOutDir: true,
sourcemap: false,
},
server: {
host: '0.0.0.0',
port: 3000,
proxy: {
'/api': commonProxy,
'/uploads': commonProxy,
'/s': commonProxy,
'/r': commonProxy,
'/static': commonProxy,
'/dist': commonProxy,
'/cache': commonProxy,
'/images': commonProxy,
'/img': commonProxy,
'/media': commonProxy,
'/files': commonProxy,
'/logos': commonProxy,
'/avatars': commonProxy,
'/downloads': commonProxy,
'/public': commonProxy,
'/favicon.ico': commonProxy,
},
},
preview: {
host: '0.0.0.0',
port: 4173,
},
test: {
environment: 'jsdom',
globals: true,
setupFiles: 'src/setupTests.ts',
},
};
});