From 0f6de4dcff783ec21fada47651d564cd5e2631b2 Mon Sep 17 00:00:00 2001 From: Bjorn Lu Date: Thu, 9 Mar 2023 04:09:24 +0800 Subject: [PATCH] fix(define): correctly replace SSR in dev (#12204) --- packages/vite/src/node/plugins/define.ts | 42 +++++++++++++------ .../vite/src/node/plugins/importAnalysis.ts | 4 +- 2 files changed, 31 insertions(+), 15 deletions(-) diff --git a/packages/vite/src/node/plugins/define.ts b/packages/vite/src/node/plugins/define.ts index f8af392e1705e3..f47a3ff97fed64 100644 --- a/packages/vite/src/node/plugins/define.ts +++ b/packages/vite/src/node/plugins/define.ts @@ -46,7 +46,7 @@ export function definePlugin(config: ResolvedConfig): Plugin { // stringified for `import.meta.env`, we can remove the quotes and // retain being an identifier typeof val === 'string' && /^[\p{L}_$]/u.test(val.trim()) - ? `__vite__${val}__vite__` + ? `__vite__define__${val}` : val } } @@ -56,24 +56,40 @@ export function definePlugin(config: ResolvedConfig): Plugin { const importMetaKeys: Record = {} const importMetaFallbackKeys: Record = {} if (isBuild) { - const env: Record = { - ...config.env, - SSR: !!config.build.ssr, - } // set here to allow override with config.define importMetaKeys['import.meta.hot'] = `undefined` - for (const key in env) { - importMetaKeys[`import.meta.env.${key}`] = JSON.stringify(env[key]) + for (const key in config.env) { + importMetaKeys[`import.meta.env.${key}`] = JSON.stringify(config.env[key]) } Object.assign(importMetaFallbackKeys, { 'import.meta.env.': `({}).`, - 'import.meta.env': JSON.stringify({ ...env, ...userDefineEnv }).replace( - /"__vite__(.+?)__vite__"/g, - (_, val) => val, - ), + 'import.meta.env': JSON.stringify({ + ...config.env, + SSR: '__vite__ssr__', + ...userDefineEnv, + }).replace(/"__vite__define__(.+?)"/g, (_, val) => val), }) } + function getImportMetaKeys(ssr: boolean): Record { + if (!isBuild) return {} + return { + ...importMetaKeys, + 'import.meta.env.SSR': ssr + '', + } + } + + function getImportMetaFallbackKeys(ssr: boolean): Record { + if (!isBuild) return {} + return { + ...importMetaFallbackKeys, + 'import.meta.env': importMetaFallbackKeys['import.meta.env'].replace( + '"__vite__ssr__"', + ssr + '', + ), + } + } + function generatePattern( ssr: boolean, ): [Record, RegExp | null] { @@ -81,9 +97,9 @@ export function definePlugin(config: ResolvedConfig): Plugin { const replacements: Record = { ...(replaceProcessEnv ? processNodeEnv : {}), - ...importMetaKeys, + ...getImportMetaKeys(ssr), ...userDefine, - ...importMetaFallbackKeys, + ...getImportMetaFallbackKeys(ssr), ...(replaceProcessEnv ? processEnv : {}), } diff --git a/packages/vite/src/node/plugins/importAnalysis.ts b/packages/vite/src/node/plugins/importAnalysis.ts index b49a920044984a..b18c9c6bc2f511 100644 --- a/packages/vite/src/node/plugins/importAnalysis.ts +++ b/packages/vite/src/node/plugins/importAnalysis.ts @@ -171,7 +171,7 @@ export function importAnalysisPlugin(config: ResolvedConfig): Plugin { if (!_env) { _env = `import.meta.env = ${JSON.stringify({ ...config.env, - SSR: '__vite__ssr__vite__', + SSR: '__vite__ssr__', })};` // account for user env defines for (const key in config.define) { @@ -183,7 +183,7 @@ export function importAnalysisPlugin(config: ResolvedConfig): Plugin { } } } - return _env.replace('"__vite__ssr__vite__"', ssr + '') + return _env.replace('"__vite__ssr__"', ssr + '') } return {