From 4a12b896ee6e2d2363a526136f8e30be6e4b6fa8 Mon Sep 17 00:00:00 2001 From: Bjorn Lu Date: Wed, 4 Jan 2023 23:59:47 +0800 Subject: [PATCH] perf(resolve): improve file existence check (#11436) --- packages/vite/src/node/plugins/resolve.ts | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/packages/vite/src/node/plugins/resolve.ts b/packages/vite/src/node/plugins/resolve.ts index 2c45771c46e101..d07589f40862cb 100644 --- a/packages/vite/src/node/plugins/resolve.ts +++ b/packages/vite/src/node/plugins/resolve.ts @@ -26,7 +26,6 @@ import { isBuiltin, isDataUrl, isExternalUrl, - isFileReadable, isNonDriveRelativeAbsolutePath, isObject, isOptimizable, @@ -472,6 +471,7 @@ function tryFsResolve( targetWeb, options.tryPrefix, options.skipPackageJson, + false, )) ) { return res @@ -486,12 +486,16 @@ function tryFsResolve( targetWeb, options.tryPrefix, options.skipPackageJson, + false, )) ) { return res } } + // if `tryIndex` false, skip as we've already tested above + if (!tryIndex) return + if ( postfix && (res = tryResolveFile( @@ -530,9 +534,11 @@ function tryResolveFile( targetWeb: boolean, tryPrefix?: string, skipPackageJson?: boolean, + skipTsExtension?: boolean, ): string | undefined { - if (isFileReadable(file)) { - if (!fs.statSync(file).isDirectory()) { + const stat = fs.statSync(file, { throwIfNoEntry: false }) + if (stat) { + if (!stat.isDirectory()) { return getRealPath(file, options.preserveSymlinks) + postfix } else if (tryIndex) { if (!skipPackageJson) { @@ -553,8 +559,12 @@ function tryResolveFile( } } - const tryTsExtension = options.isFromTsImporter && isPossibleTsOutput(file) - if (tryTsExtension) { + // try resolve .js import to typescript file + if ( + !skipTsExtension && + options.isFromTsImporter && + isPossibleTsOutput(file) + ) { const tsSrcPaths = getPotentialTsSrcPaths(file) for (const srcPath of tsSrcPaths) { const res = tryResolveFile( @@ -565,6 +575,7 @@ function tryResolveFile( targetWeb, tryPrefix, skipPackageJson, + true, ) if (res) return res }