diff --git a/packages/vite/src/node/__tests__/env.spec.ts b/packages/vite/src/node/__tests__/env.spec.ts index 4e2a88f95b1665..f1e74bc0193cfc 100644 --- a/packages/vite/src/node/__tests__/env.spec.ts +++ b/packages/vite/src/node/__tests__/env.spec.ts @@ -9,14 +9,15 @@ describe('loadEnv', () => { test('basic', () => { expect(loadEnv('development', join(__dirname, './env'))) .toMatchInlineSnapshot(` - { - "VITE_APP_BASE_ROUTE": "/", - "VITE_APP_BASE_URL": "/", - "VITE_ENV1": "ENV1", - "VITE_ENV2": "ENV2", - "VITE_ENV3": "ENV3", - } - `) + { + "VITE_APP_BASE_ROUTE": "/", + "VITE_APP_BASE_URL": "/", + "VITE_ENV1": "ENV1", + "VITE_ENV2": "ENV2", + "VITE_ENV3": "ENV3", + "VITE_USER_NODE_ENV": "production", + } + `) }) test('specific prefix', () => { @@ -50,4 +51,17 @@ describe('loadEnv', () => { loadEnv('development', join(__dirname, './env')) expect(process.env.VITE_USER_NODE_ENV).toEqual('test') }) + + test('prioritize existing process.env', () => { + process.env.VITE_ENV_TEST_ENV = 'EXIST' + expect(loadEnv('existing', join(__dirname, './env'))) + .toMatchInlineSnapshot(` + { + "VITE_APP_BASE_ROUTE": "/", + "VITE_APP_BASE_URL": "/", + "VITE_ENV_TEST_ENV": "EXIST", + "VITE_USER_NODE_ENV": "test", + } + `) + }) }) diff --git a/packages/vite/src/node/__tests__/env/.env.existing b/packages/vite/src/node/__tests__/env/.env.existing new file mode 100644 index 00000000000000..b46d6e30f8c5f7 --- /dev/null +++ b/packages/vite/src/node/__tests__/env/.env.existing @@ -0,0 +1 @@ +VITE_ENV_TEST_ENV=DOTENV diff --git a/packages/vite/src/node/env.ts b/packages/vite/src/node/env.ts index a69be1ed233043..8d39707ddd7455 100644 --- a/packages/vite/src/node/env.ts +++ b/packages/vite/src/node/env.ts @@ -24,17 +24,6 @@ export function loadEnv( /** mode local file */ `.env.${mode}.local` ] - // check if there are actual env variables starting with VITE_* - // these are typically provided inline and should be prioritized - for (const key in process.env) { - if ( - prefixes.some((prefix) => key.startsWith(prefix)) && - env[key] === undefined - ) { - env[key] = process.env[key] as string - } - } - const parsed = Object.fromEntries( envFiles.flatMap((file) => { const path = lookupFile(envDir, [file], { @@ -69,6 +58,15 @@ export function loadEnv( process.env.VITE_USER_NODE_ENV = value } } + + // check if there are actual env variables starting with VITE_* + // these are typically provided inline and should be prioritized + for (const key in process.env) { + if (prefixes.some((prefix) => key.startsWith(prefix))) { + env[key] = process.env[key] as string + } + } + return env }