From c1c7af3cb95acca117e1fea0f8441548c39a51ce Mon Sep 17 00:00:00 2001 From: swandir Date: Thu, 16 Jun 2022 11:00:07 +0300 Subject: [PATCH] fix(optimizer): browser mapping for yarn pnp (#6493) --- .../src/node/optimizer/esbuildDepPlugin.ts | 51 ++++++++++++------- 1 file changed, 32 insertions(+), 19 deletions(-) diff --git a/packages/vite/src/node/optimizer/esbuildDepPlugin.ts b/packages/vite/src/node/optimizer/esbuildDepPlugin.ts index fbfb658e9f7505..6ab689f856df55 100644 --- a/packages/vite/src/node/optimizer/esbuildDepPlugin.ts +++ b/packages/vite/src/node/optimizer/esbuildDepPlugin.ts @@ -80,6 +80,24 @@ export function esbuildDepPlugin( return resolver(id, _importer, undefined) } + const resolveResult = (id: string, resolved: string) => { + if (resolved.startsWith(browserExternalId)) { + return { + path: id, + namespace: 'browser-external' + } + } + if (isExternalUrl(resolved)) { + return { + path: resolved, + external: true + } + } + return { + path: path.resolve(resolved) + } + } + return { name: 'vite:dep-pre-bundle', setup(build) { @@ -156,21 +174,7 @@ export function esbuildDepPlugin( // use vite's own resolver const resolved = await resolve(id, importer, kind) if (resolved) { - if (resolved.startsWith(browserExternalId)) { - return { - path: id, - namespace: 'browser-external' - } - } - if (isExternalUrl(resolved)) { - return { - path: resolved, - external: true - } - } - return { - path: path.resolve(resolved) - } + return resolveResult(id, resolved) } } ) @@ -258,11 +262,20 @@ module.exports = Object.create(new Proxy({}, { if (isRunningWithYarnPnp) { build.onResolve( { filter: /.*/ }, - async ({ path, importer, kind, resolveDir }) => ({ - // pass along resolveDir for entries - path: await resolve(path, importer, kind, resolveDir) - }) + async ({ path: id, importer, kind, resolveDir, namespace }) => { + const resolved = await resolve( + id, + importer, + kind, + // pass along resolveDir for entries + namespace === 'dep' ? resolveDir : undefined + ) + if (resolved) { + return resolveResult(id, resolved) + } + } ) + build.onLoad({ filter: /.*/ }, async (args) => ({ contents: await fs.readFile(args.path), loader: 'default'