diff --git a/app/game-frontend/test/viteConfig.test.ts b/app/game-frontend/test/viteConfig.test.ts new file mode 100644 index 0000000..01a8abe --- /dev/null +++ b/app/game-frontend/test/viteConfig.test.ts @@ -0,0 +1,15 @@ +import assert from 'node:assert/strict'; +import { describe, it } from 'node:test'; +import { mergeViteEnv } from '../vite.config.ts'; + +void describe('game frontend Vite config', () => { + void it('prefers managed runtime values over values loaded from env files', () => { + const env = mergeViteEnv( + { VITE_APP_BASE_PATH: '/gateway', VITE_GAME_API_URL: '/gateway/api/trpc' }, + { VITE_APP_BASE_PATH: '/hwe', VITE_GAME_API_URL: '/hwe/api/trpc' } + ); + + assert.equal(env.VITE_APP_BASE_PATH, '/hwe'); + assert.equal(env.VITE_GAME_API_URL, '/hwe/api/trpc'); + }); +}); diff --git a/app/game-frontend/vite.config.ts b/app/game-frontend/vite.config.ts index d69ed51..96f4243 100644 --- a/app/game-frontend/vite.config.ts +++ b/app/game-frontend/vite.config.ts @@ -23,9 +23,17 @@ const resolvePreviewAllowedHosts = (value: string | undefined): true | string[] return hosts; }; +export const mergeViteEnv = ( + fileEnv: Record, + runtimeEnv: NodeJS.ProcessEnv +): Record => ({ + ...fileEnv, + ...runtimeEnv, +}); + // https://vitejs.dev/config/ export default defineConfig(({ mode }) => { - const env = loadEnv(mode, process.cwd(), ''); + const env = mergeViteEnv(loadEnv(mode, process.cwd(), ''), process.env); return { base: normalizeBasePath(env.VITE_APP_BASE_PATH), plugins: [vue(), tailwindcss()],