From e14a1cf55db544a166378794dcc3d54063104484 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E6=A0=91=40=E9=98=BF=E9=87=8C?= Date: Thu, 10 Feb 2022 17:38:41 +0800 Subject: [PATCH] feat:enable-optimizeDeps.esbuildOptions.loader enable respect `optimizeDeps.esbuildOptions.loader` option so that the map of js types to loader could be customized, relevant issue: https://github.com/vitejs/vite/discussions/3448 --- packages/vite/src/node/optimizer/index.ts | 8 ++++++-- packages/vite/src/node/optimizer/scan.ts | 3 ++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/vite/src/node/optimizer/index.ts b/packages/vite/src/node/optimizer/index.ts index 37294aea459c15..f8b28bd9882f43 100644 --- a/packages/vite/src/node/optimizer/index.ts +++ b/packages/vite/src/node/optimizer/index.ts @@ -412,11 +412,15 @@ export async function runOptimizeDeps( try { exportsData = parse(entryContent) as ExportsData } catch { + const loader = + (esbuildOptions.loader && + esbuildOptions.loader[path.extname(filePath)]) || + 'jsx' debug( - `Unable to parse dependency: ${id}. Trying again with a JSX transform.` + `Unable to parse dependency: ${id}. Trying again with a ${loader} transform.` ) const transformed = await transformWithEsbuild(entryContent, filePath, { - loader: 'jsx' + loader }) // Ensure that optimization won't fail by defaulting '.js' to the JSX parser. // This is useful for packages such as Gatsby. diff --git a/packages/vite/src/node/optimizer/scan.ts b/packages/vite/src/node/optimizer/scan.ts index e940617386eb35..cf566fe5ad6420 100644 --- a/packages/vite/src/node/optimizer/scan.ts +++ b/packages/vite/src/node/optimizer/scan.ts @@ -476,8 +476,9 @@ function esbuildScanPlugin( contents })) } + const { loader } = config.optimizeDeps?.esbuildOptions ?? {} return { - loader: ext as Loader, + loader: ((loader && loader[`.${ext}`]) || ext) as Loader, contents } })