From 49df955c3f25453eb4fb468e077da1cc5eddc1ed Mon Sep 17 00:00:00 2001 From: bluwy Date: Fri, 5 Aug 2022 13:20:17 +0800 Subject: [PATCH 1/2] feat(optimizer): replace user defines --- packages/vite/src/node/optimizer/index.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/vite/src/node/optimizer/index.ts b/packages/vite/src/node/optimizer/index.ts index b678d983353c8f..505c7521673db3 100644 --- a/packages/vite/src/node/optimizer/index.ts +++ b/packages/vite/src/node/optimizer/index.ts @@ -542,11 +542,17 @@ export async function runOptimizeDeps( // In lib mode, we need to keep process.env.NODE_ENV untouched, so to at build // time we replace it by __vite_process_env_NODE_ENV. This placeholder will be // later replaced by the define plugin - const define = { + const define: Record = { 'process.env.NODE_ENV': isBuild ? '__vite_process_env_NODE_ENV' : JSON.stringify(process.env.NODE_ENV || config.mode) } + // replace define eagerly without define plugin so esbuild can treeshake + // unused modules when scanning, which prevents prebundling optional deps + for (const key in config.define) { + const value = config.define[key] + define[key] = typeof value === 'string' ? value : JSON.stringify(value) + } const platform = ssr && config.ssr?.target !== 'webworker' ? 'node' : 'browser' From 5ed647c657e2fcf8856af259c3cbaa8839d67126 Mon Sep 17 00:00:00 2001 From: bluwy Date: Fri, 5 Aug 2022 13:25:05 +0800 Subject: [PATCH 2/2] docs: update note --- packages/vite/src/node/optimizer/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/vite/src/node/optimizer/index.ts b/packages/vite/src/node/optimizer/index.ts index 505c7521673db3..ee30f2389511e4 100644 --- a/packages/vite/src/node/optimizer/index.ts +++ b/packages/vite/src/node/optimizer/index.ts @@ -548,7 +548,7 @@ export async function runOptimizeDeps( : JSON.stringify(process.env.NODE_ENV || config.mode) } // replace define eagerly without define plugin so esbuild can treeshake - // unused modules when scanning, which prevents prebundling optional deps + // unused modules when scanning and prebundling for (const key in config.define) { const value = config.define[key] define[key] = typeof value === 'string' ? value : JSON.stringify(value)