diff --git a/packages/vite/src/node/optimizer/index.ts b/packages/vite/src/node/optimizer/index.ts index b678d983353c8f..ee30f2389511e4 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 and prebundling + 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'