From c5fe45fdd2c90436e2ee00754aedde2a32325ac6 Mon Sep 17 00:00:00 2001 From: Evan You Date: Tue, 26 Jan 2021 09:59:37 -0500 Subject: [PATCH] fix(optimizer): fix entry matching edge case fix #1661 again --- packages/vite/src/node/optimizer/index.ts | 37 ++++++++++++++--------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/packages/vite/src/node/optimizer/index.ts b/packages/vite/src/node/optimizer/index.ts index 0f3238a4e32f96..fb05113d355c5f 100644 --- a/packages/vite/src/node/optimizer/index.ts +++ b/packages/vite/src/node/optimizer/index.ts @@ -267,25 +267,32 @@ export async function optimizeDeps( if (/\.vite[\/\\]chunk\.\w+\.js$/.test(output) || output.endsWith('.map')) continue const { inputs, exports: generatedExports } = meta.outputs[output] + const relativeOutput = normalizePath( + path.relative(cacheDir, path.resolve(output)) + ) for (const input in inputs) { const entry = normalizePath(path.resolve(input)) + if (!entry.endsWith(relativeOutput)) { + continue + } const id = entryToIdMap[entry.toLowerCase()] - if (id) { - // check if this is a cjs dep. - const [imports, exports] = parse(fs.readFileSync(entry, 'utf-8')) - data.optimized[id] = { - file: normalizePath(path.resolve(output)), - needsInterop: - // entry has no ESM syntax - likely CJS or UMD - (!exports.length && !imports.length) || - // if a peer dep used require() on a ESM dep, esbuild turns the - // ESM dep's entry chunk into a single default export... detect - // such cases by checking exports mismatch, and force interop. - (isSingleDefaultExport(generatedExports) && - !isSingleDefaultExport(exports)) - } - break + if (!id) { + continue + } + // check if this is a cjs dep. + const [imports, exports] = parse(fs.readFileSync(entry, 'utf-8')) + data.optimized[id] = { + file: normalizePath(path.resolve(output)), + needsInterop: + // entry has no ESM syntax - likely CJS or UMD + (!exports.length && !imports.length) || + // if a peer dep used require() on a ESM dep, esbuild turns the + // ESM dep's entry chunk into a single default export... detect + // such cases by checking exports mismatch, and force interop. + (isSingleDefaultExport(generatedExports) && + !isSingleDefaultExport(exports)) } + break } }