From 09248795ca79a7053b803af8977c3422f5cd5824 Mon Sep 17 00:00:00 2001 From: Dario Piotrowicz Date: Fri, 8 Nov 2024 05:32:52 +0000 Subject: [PATCH] feat(optimizer): allow users to specify their esbuild `platform` option (#18611) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 翠 / green --- .../vite/src/node/optimizer/esbuildDepPlugin.ts | 2 +- packages/vite/src/node/optimizer/index.ts | 13 +++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/packages/vite/src/node/optimizer/esbuildDepPlugin.ts b/packages/vite/src/node/optimizer/esbuildDepPlugin.ts index c22a52b57ce6a1..7afbb7fbdea82f 100644 --- a/packages/vite/src/node/optimizer/esbuildDepPlugin.ts +++ b/packages/vite/src/node/optimizer/esbuildDepPlugin.ts @@ -304,7 +304,7 @@ const matchesEntireLine = (text: string) => `^${escapeRegex(text)}$` // https://github.com/evanw/esbuild/issues/566#issuecomment-735551834 export function esbuildCjsExternalPlugin( externals: string[], - platform: 'node' | 'browser', + platform: 'node' | 'browser' | 'neutral', ): Plugin { return { name: 'cjs-external', diff --git a/packages/vite/src/node/optimizer/index.ts b/packages/vite/src/node/optimizer/index.ts index 921326bdda0adb..b859319c0a81e3 100644 --- a/packages/vite/src/node/optimizer/index.ts +++ b/packages/vite/src/node/optimizer/index.ts @@ -761,7 +761,15 @@ async function prepareEsbuildOptimizerRun( ), } - const platform = environment.config.consumer === 'client' ? 'browser' : 'node' + const platform = + optimizeDeps.esbuildOptions?.platform ?? + // We generally don't want to use platform 'neutral', as esbuild has custom handling + // when the platform is 'node' or 'browser' that can't be emulated by using mainFields + // and conditions + (environment.config.consumer === 'client' || + environment.config.ssr.target === 'webworker' + ? 'browser' + : 'node') const external = [...(optimizeDeps?.exclude ?? [])] @@ -775,9 +783,6 @@ async function prepareEsbuildOptimizerRun( absWorkingDir: process.cwd(), entryPoints: Object.keys(flatIdDeps), bundle: true, - // We can't use platform 'neutral', as esbuild has custom handling - // when the platform is 'node' or 'browser' that can't be emulated - // by using mainFields and conditions platform, define, format: 'esm',