diff --git a/packages/vite/src/node/plugins/resolve.ts b/packages/vite/src/node/plugins/resolve.ts index 0c4aa2bdd7d49b..1c1c80f573e84d 100644 --- a/packages/vite/src/node/plugins/resolve.ts +++ b/packages/vite/src/node/plugins/resolve.ts @@ -105,6 +105,8 @@ export interface InternalResolveOptions extends Required { // Resolve using esbuild deps optimization getDepsOptimizer?: (ssr: boolean) => DepsOptimizer | undefined shouldExternalize?: (id: string) => boolean | undefined + // Check this resolve is called from `hookNodeResolve` in SSR + isHookNodeResolve?: boolean } export function resolvePlugin(resolveOptions: InternalResolveOptions): Plugin { @@ -687,10 +689,11 @@ export function tryNodeResolve( // if import can't be found, check if it's an optional peer dep. // if so, we can resolve to a special id that errors only when imported. if ( + !options.isHookNodeResolve && basedir !== root && // root has no peer dep - !isBuiltin(id) && - !id.includes('\0') && - bareImportRE.test(id) + !isBuiltin(nestedPath) && + !nestedPath.includes('\0') && + bareImportRE.test(nestedPath) ) { // find package.json with `name` as main const mainPackageJson = lookupFile(basedir, ['package.json'], { @@ -699,11 +702,11 @@ export function tryNodeResolve( if (mainPackageJson) { const mainPkg = JSON.parse(mainPackageJson) if ( - mainPkg.peerDependencies?.[id] && - mainPkg.peerDependenciesMeta?.[id]?.optional + mainPkg.peerDependencies?.[nestedPath] && + mainPkg.peerDependenciesMeta?.[nestedPath]?.optional ) { return { - id: `${optionalPeerDepId}:${id}:${mainPkg.name}` + id: `${optionalPeerDepId}:${nestedPath}:${mainPkg.name}` } } } diff --git a/packages/vite/src/node/ssr/ssrModuleLoader.ts b/packages/vite/src/node/ssr/ssrModuleLoader.ts index 0e4e163570a575..eaae5e73015b46 100644 --- a/packages/vite/src/node/ssr/ssrModuleLoader.ts +++ b/packages/vite/src/node/ssr/ssrModuleLoader.ts @@ -127,7 +127,8 @@ async function instantiateModule( isBuild: true, isProduction, isRequire: true, - root + root, + isHookNodeResolve: true } // Since dynamic imports can happen in parallel, we need to