From aa81f4b6e2f103dd727d891325a1d61dad7f1e35 Mon Sep 17 00:00:00 2001 From: Haoqun Jiang Date: Sat, 2 Apr 2022 22:16:49 +0800 Subject: [PATCH] fix(resolver): skip known ESM entries when resolving a `require` call Fixes #7578 --- packages/vite/src/node/constants.ts | 15 +++++++++++++++ packages/vite/src/node/plugins/resolve.ts | 6 ++++++ 2 files changed, 21 insertions(+) diff --git a/packages/vite/src/node/constants.ts b/packages/vite/src/node/constants.ts index 9612cd8c96460d..1741bf2dd7a94b 100644 --- a/packages/vite/src/node/constants.ts +++ b/packages/vite/src/node/constants.ts @@ -6,6 +6,21 @@ export const DEFAULT_MAIN_FIELDS = [ 'jsnext' ] +/** + * A non-exhaustive list of known-to-be-ES-module entry names. + * From + */ +export const KNOWN_ESM_MAIN_FIELDS = [ + 'module', + 'jsnext:main', + 'jsnext', + 'esnext', + 'es2015', + 'es2020', + 'fesm2015', + 'fesm2020' +] + export const DEFAULT_EXTENSIONS = [ '.mjs', '.js', diff --git a/packages/vite/src/node/plugins/resolve.ts b/packages/vite/src/node/plugins/resolve.ts index 1b59503a9d43ed..10e2989af1114f 100644 --- a/packages/vite/src/node/plugins/resolve.ts +++ b/packages/vite/src/node/plugins/resolve.ts @@ -7,6 +7,7 @@ import { SPECIAL_QUERY_RE, DEFAULT_EXTENSIONS, DEFAULT_MAIN_FIELDS, + KNOWN_ESM_MAIN_FIELDS, OPTIMIZABLE_ENTRY_RE, DEP_VERSION_RE } from '../constants' @@ -777,6 +778,11 @@ export function resolvePackageEntry( if (!entryPoint || entryPoint.endsWith('.mjs')) { for (const field of options.mainFields || DEFAULT_MAIN_FIELDS) { + // If the initiator is a `require` call, don't use the ESM entries + if (options.isRequire && KNOWN_ESM_MAIN_FIELDS.includes(field)) { + continue + } + if (typeof data[field] === 'string') { entryPoint = data[field] break