From 71516db3438c57643df80da687be57cf641b1762 Mon Sep 17 00:00:00 2001 From: sun0day Date: Wed, 5 Jul 2023 17:52:37 +0800 Subject: [PATCH] fix(define): stringify object parse error in build mode (#13600) --- packages/vite/src/node/plugins/define.ts | 6 +++--- playground/env/__tests__/env.spec.ts | 7 ++++++- playground/env/index.html | 5 +++++ playground/env/vite.config.js | 3 ++- 4 files changed, 16 insertions(+), 5 deletions(-) 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 @@

Environment Variables

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 @@

Environment Variables

text('.bool', typeof import.meta.env.VITE_BOOL) text('.number', typeof import.meta.env.VITE_NUMBER) text('.string', typeof import.meta.env.VITE_STRING) + text('.stringify-object', typeof import.meta.env.VITE_STRINGIFY_OBJECT) text('.ssr', import.meta.env.SSR) text('.node-env', process.env.NODE_ENV) text('.global-node-env', global.process.env.NODE_ENV) diff --git a/playground/env/vite.config.js b/playground/env/vite.config.js index 1f15f79c6afd3b..bca10b34c4c6b5 100644 --- a/playground/env/vite.config.js +++ b/playground/env/vite.config.js @@ -11,6 +11,7 @@ export default defineConfig({ define: { 'import.meta.env.VITE_BOOL': true, 'import.meta.env.VITE_NUMBER': '123', - 'import.meta.env.VITE_STRING': JSON.stringify('123'), + 'import.meta.env.VITE_STRING': JSON.stringify('{"123",}'), + 'import.meta.env.VITE_STRINGIFY_OBJECT': JSON.stringify({ a: '1', b: '2' }), }, })