Кэш разрешения модуля - это способ кеширования результата предыдущих вызовов для разрешения имени модуля.
Внутренне это стандарт:
let result = cache.get(key);
if (!result) {
result = create();
cache.set(key, result);
}
return result;
Пример его использования может быть замеченным здесь в свертке . Я бы сказал, что это, вероятно, предпочтительнее использовать, но я понятия не имею, на что похоже влияние на производительность.
- Что следует передать в параметр
currentDirectory
для createModuleResolutionCache
?
Если у вас есть хост или программа компилятора, вы должны предоставить результат CompilerHost#getCurrentDirectory()
или Program#getCurrentDirectory()
. Если у вас их нет, используйте ts.sys.getCurrentDirectory()
, который используется по умолчанию при использовании ts.createCompilerHost
.
Означает ли resolveModuleNameFromCache
буквально «разрешение только из кэша», или это будет возвращаться к «тяжелой работе», если это необходимо?
Это не будет делать ничего из тяжелая работа и будет только пытаться получить имя из кэша. Вот текущий код в компиляторе (.get(moduleName)
- это Map#get
):
export function resolveModuleNameFromCache(
moduleName: string,
containingFile: string,
cache: ModuleResolutionCache
): ResolvedModuleWithFailedLookupLocations | undefined {
const containingDirectory = getDirectoryPath(containingFile);
const perFolderCache = cache && cache.getOrCreateCacheForDirectory(containingDirectory);
return perFolderCache && perFolderCache.get(moduleName);
}