diff --git a/packages/vite/src/node/plugins/define.ts b/packages/vite/src/node/plugins/define.ts index c9568ada69799b..c5150ab395e6cb 100644 --- a/packages/vite/src/node/plugins/define.ts +++ b/packages/vite/src/node/plugins/define.ts @@ -41,7 +41,7 @@ export function definePlugin(config: ResolvedConfig): Plugin { if (isBuild) { const match = key.match(metaEnvRe) if (match) { - userDefineEnv[match[1]] = `__vite__define__${userDefine[key]}` + userDefineEnv[match[1]] = `__vite__define__${key}__define__vite__` } } } @@ -62,8 +62,8 @@ export function definePlugin(config: ResolvedConfig): Plugin { SSR: '__vite__ssr__', ...userDefineEnv, }).replace( - /"__vite__define__(.+?)"([,}])/g, - (_, val, suffix) => `${val.replace(/(^\\")|(\\"$)/g, '"')}${suffix}`, + /"__vite__define__(.+?)__define__vite__"/g, + (_, key) => userDefine[key], ), }) } diff --git a/playground/env/__tests__/env.spec.ts b/playground/env/__tests__/env.spec.ts index 91227abe21fb2c..3c005c8342b1ef 100644 --- a/playground/env/__tests__/env.spec.ts +++ b/playground/env/__tests__/env.spec.ts @@ -41,6 +41,7 @@ test('define', async () => { expect(await page.textContent('.bool')).toBe('boolean') expect(await page.textContent('.number')).toBe('number') expect(await page.textContent('.string')).toBe('string') + expect(await page.textContent('.stringify-object')).toBe('object') }) test('NODE_ENV', async () => { @@ -82,7 +83,11 @@ test('env object', async () => { DEV: !isBuild, PROD: isBuild, VITE_NUMBER: 123, - VITE_STRING: '123', + VITE_STRING: '{"123",}', + VITE_STRINGIFY_OBJECT: { + a: '1', + b: '2', + }, }) }) diff --git a/playground/env/index.html b/playground/env/index.html index 547b424ee809e4..d07b507490e2da 100644 --- a/playground/env/index.html +++ b/playground/env/index.html @@ -15,6 +15,10 @@
typeof import.meta.env.VITE_BOOL:
typeof import.meta.env.VITE_NUMBER:
typeof import.meta.env.VITE_STRING:
+ typeof import.meta.env.VITE_STRINGIFY_OBJECT:
+
+
process.env.NODE_ENV:
global.process.env.NODE_ENV:
@@ -38,6 +42,7 @@