From 992dfa751007c8f5ac771ee66a7cb928b3ff7ce1 Mon Sep 17 00:00:00 2001 From: patak Date: Sat, 25 Mar 2023 10:45:54 +0100 Subject: [PATCH 1/4] perf(resolve): findNearestMainPackageData instead of lookupFile --- packages/vite/src/node/packages.ts | 14 ++++++++++++++ packages/vite/src/node/plugins/resolve.ts | 16 ++++++---------- packages/vite/src/node/utils.ts | 8 +------- 3 files changed, 21 insertions(+), 17 deletions(-) diff --git a/packages/vite/src/node/packages.ts b/packages/vite/src/node/packages.ts index 728c941051f72f..480a2b949b6afc 100644 --- a/packages/vite/src/node/packages.ts +++ b/packages/vite/src/node/packages.ts @@ -143,6 +143,20 @@ export function findNearestPackageData( return null } +// Finds the nearest package.json with a `name` field +export function findNearestMainPackageData( + basedir: string, + packageCache?: PackageCache, +): PackageData | null { + const nearestPackage = findNearestPackageData(basedir, packageCache) + return ( + nearestPackage && + (nearestPackage.data.name + ? nearestPackage + : findNearestMainPackageData(path.dirname(basedir), packageCache)) + ) +} + export function loadPackageData(pkgPath: string): PackageData { const data = JSON.parse(fs.readFileSync(pkgPath, 'utf-8')) const pkgDir = path.dirname(pkgPath) diff --git a/packages/vite/src/node/plugins/resolve.ts b/packages/vite/src/node/plugins/resolve.ts index 581b1a3368c4c8..f8e8e48617a837 100644 --- a/packages/vite/src/node/plugins/resolve.ts +++ b/packages/vite/src/node/plugins/resolve.ts @@ -33,7 +33,6 @@ import { isPossibleTsOutput, isTsRequest, isWindows, - lookupFile, normalizePath, resolveFrom, safeRealpathSync, @@ -44,6 +43,7 @@ import type { DepsOptimizer } from '../optimizer' import type { SSROptions } from '..' import type { PackageCache, PackageData } from '../packages' import { + findNearestMainPackageData, findNearestPackageData, loadPackageData, resolvePackageData, @@ -704,18 +704,14 @@ export function tryNodeResolve( !id.includes('\0') && bareImportRE.test(id) ) { - // find package.json with `name` as main - const mainPackageJson = lookupFile(basedir, ['package.json'], { - predicate: (content) => !!JSON.parse(content).name, - }) - if (mainPackageJson) { - const mainPkg = JSON.parse(mainPackageJson) + const mainPkg = findNearestMainPackageData(basedir, packageCache) + if (mainPkg) { if ( - mainPkg.peerDependencies?.[id] && - mainPkg.peerDependenciesMeta?.[id]?.optional + mainPkg.data.peerDependencies?.[id] && + mainPkg.data.peerDependenciesMeta?.[id]?.optional ) { return { - id: `${optionalPeerDepId}:${id}:${mainPkg.name}`, + id: `${optionalPeerDepId}:${id}:${mainPkg.data.name}`, } } } diff --git a/packages/vite/src/node/utils.ts b/packages/vite/src/node/utils.ts index 81ebda7b98e7db..aa8fcdd22674d5 100644 --- a/packages/vite/src/node/utils.ts +++ b/packages/vite/src/node/utils.ts @@ -395,7 +395,6 @@ export function isDefined(value: T | undefined | null): value is T { interface LookupFileOptions { pathOnly?: boolean rootDir?: string - predicate?: (file: string) => boolean } export function lookupFile( @@ -406,12 +405,7 @@ export function lookupFile( for (const format of formats) { const fullPath = path.join(dir, format) if (fs.existsSync(fullPath) && fs.statSync(fullPath).isFile()) { - const result = options?.pathOnly - ? fullPath - : fs.readFileSync(fullPath, 'utf-8') - if (!options?.predicate || options.predicate(result)) { - return result - } + return options?.pathOnly ? fullPath : fs.readFileSync(fullPath, 'utf-8') } } const parentDir = path.dirname(dir) From f5f394624aa125283257ffa3f089c98c69e8aac6 Mon Sep 17 00:00:00 2001 From: patak Date: Sat, 25 Mar 2023 10:50:39 +0100 Subject: [PATCH 2/4] chore: reduce diff --- packages/vite/src/node/plugins/resolve.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/vite/src/node/plugins/resolve.ts b/packages/vite/src/node/plugins/resolve.ts index f8e8e48617a837..18c00a129e7be0 100644 --- a/packages/vite/src/node/plugins/resolve.ts +++ b/packages/vite/src/node/plugins/resolve.ts @@ -704,14 +704,14 @@ export function tryNodeResolve( !id.includes('\0') && bareImportRE.test(id) ) { - const mainPkg = findNearestMainPackageData(basedir, packageCache) + const mainPkg = findNearestMainPackageData(basedir, packageCache)?.data if (mainPkg) { if ( - mainPkg.data.peerDependencies?.[id] && - mainPkg.data.peerDependenciesMeta?.[id]?.optional + mainPkg.peerDependencies?.[id] && + mainPkg.peerDependenciesMeta?.[id]?.optional ) { return { - id: `${optionalPeerDepId}:${id}:${mainPkg.data.name}`, + id: `${optionalPeerDepId}:${id}:${mainPkg.name}`, } } } From 9ced6551fd4eed8ba79cc5a94dcc227f53143382 Mon Sep 17 00:00:00 2001 From: patak Date: Sat, 25 Mar 2023 11:40:41 +0100 Subject: [PATCH 3/4] chore: optimize Co-authored-by: Bjorn Lu --- packages/vite/src/node/packages.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/vite/src/node/packages.ts b/packages/vite/src/node/packages.ts index 480a2b949b6afc..baaf0256cf06f3 100644 --- a/packages/vite/src/node/packages.ts +++ b/packages/vite/src/node/packages.ts @@ -153,7 +153,7 @@ export function findNearestMainPackageData( nearestPackage && (nearestPackage.data.name ? nearestPackage - : findNearestMainPackageData(path.dirname(basedir), packageCache)) + : findNearestMainPackageData(path.dirname(nearestPackage.dir), packageCache)) ) } From 033da7eff15f42f80f5e3e5b0f210d90a68bfe2b Mon Sep 17 00:00:00 2001 From: patak Date: Sat, 25 Mar 2023 11:52:03 +0100 Subject: [PATCH 4/4] chore: format --- packages/vite/src/node/packages.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/vite/src/node/packages.ts b/packages/vite/src/node/packages.ts index baaf0256cf06f3..b4a0d7948240e6 100644 --- a/packages/vite/src/node/packages.ts +++ b/packages/vite/src/node/packages.ts @@ -153,7 +153,10 @@ export function findNearestMainPackageData( nearestPackage && (nearestPackage.data.name ? nearestPackage - : findNearestMainPackageData(path.dirname(nearestPackage.dir), packageCache)) + : findNearestMainPackageData( + path.dirname(nearestPackage.dir), + packageCache, + )) ) }