diff --git a/packages/compiler-sfc/src/script/resolveType.ts b/packages/compiler-sfc/src/script/resolveType.ts index f6e291791a8..2c250a9d716 100644 --- a/packages/compiler-sfc/src/script/resolveType.ts +++ b/packages/compiler-sfc/src/script/resolveType.ts @@ -24,6 +24,9 @@ import type { TSTypeReference, TemplateLiteral, } from '@babel/types' +import { + DEFAULT_FILENAME, +} from '../parse' import { UNKNOWN_TYPE, createGetCanonicalFileName, @@ -46,7 +49,7 @@ import * as process from 'process' export type SimpleTypeResolveOptions = Partial< Pick< SFCScriptCompileOptions, - 'globalTypeFiles' | 'fs' | 'babelParserPlugins' | 'isProd' + 'globalTypeFiles' | 'fs' | 'babelParserPlugins' | 'isProd' | 'id' > > @@ -898,14 +901,19 @@ function importSourceToScope( let resolved: string | undefined = scope.resolvedImportSources[source] if (!resolved) { + let fullName = scope.filename; + const id = ctx.options.id; + if (id && fullName === DEFAULT_FILENAME){ + fullName = id ; + } if (source.startsWith('..')) { const osSpecificJoinFn = process.platform === 'win32' ? join : joinPaths - const filename = osSpecificJoinFn(dirname(scope.filename), source) + const filename = osSpecificJoinFn(dirname(fullName), source) resolved = resolveExt(filename, fs) } else if (source.startsWith('.')) { // relative import - fast path - const filename = joinPaths(dirname(scope.filename), source) + const filename = joinPaths(dirname(fullName), source) resolved = resolveExt(filename, fs) } else { // module or aliased import - use full TS resolution, only supported in Node @@ -928,7 +936,7 @@ function importSourceToScope( ) } } - resolved = resolveWithTS(scope.filename, source, ts, fs) + resolved = resolveWithTS(fullName, source, ts, fs) } if (resolved) { resolved = scope.resolvedImportSources[source] = normalizePath(resolved)