Spec-Zone.ru › TypeScript 5.1

Настройка отслеживания файлов

Начиная с TypeScript 3.8 и далее, компилятор TypeScript предоставляет конфигурацию, которая контролирует, как он отслеживает файлы и каталоги. До этой версии конфигурация требовала использования переменных окружения, которые по-прежнему доступны.

Обзор

Реализация компилятора --watch опирается на методы Node’s fs.watch и fs.watchFile. Каждый из этих методов имеет свои преимущества и недостатки.

fs.watch полагается на события файловой системы для трансляции изменений в отслеживаемых файлах и каталогах. Реализация этой команды зависит от ОС и может быть ненадежной — во многих операционных системах она не работает как ожидается. Кроме того, некоторые операционные системы ограничивают количество одновременно существующих отслеживаний (например, некоторые варианты Linux). Активное использование fs.watch в больших кодовых базах может превысить эти ограничения и привести к нежелательному поведению. Однако, поскольку эта реализация основана на модели событий, использование процессора относительно невелико. Компилятор обычно использует fs.watch для отслеживания каталогов (например, каталоги источников, включенные файлами конфигурации компилятора, и каталоги, в которых произошел сбой разрешения модулей, среди прочих). TypeScript использует их для дополнения потенциальных ошибок в индивидуальных файловых наблюдателях. Однако существует ключевое ограничение этой стратегии: рекурсивное отслеживание каталогов поддерживается в Windows и macOS, но не в Linux. Это потребовало разработки дополнительных стратегий для отслеживания файлов и каталогов.

fs.watchFile использует опросный метод и, следовательно, расходует циклы процессора. Однако fs.watchFile является, пожалуй, наиболее надежным механизмом для подписки на события из файлов и каталогов, которые нас интересуют. В рамках этой стратегии компилятор TypeScript обычно использует fs.watchFile для отслеживания исходных файлов, файлов конфигурации и файлов, которые, по-видимому, отсутствуют на основании ссылочных утверждений. Это означает, что степень повышения использования процессора при использовании fs.watchFile напрямую зависит от количества отслеживаемых файлов в кодовой базе.

Настройка отслеживания файлов с помощью tsconfig.json

Рекомендуемый метод настройки поведения отслеживания — через новый раздел watchOptions в файле tsconfig.json. Ниже приведен пример конфигурации. Подробные описания доступных настроек см. в следующем разделе.

{
  // Some typical compiler options
  "compilerOptions": {
    "target": "es2020",
    "moduleResolution": "node"
    // ...
  },

  // NEW: Options for file/directory watching
  "watchOptions": {
    // Use native file system events for files and directories
    "watchFile": "useFsEvents",
    "watchDirectory": "useFsEvents",

    // Poll files for updates more frequently
    // when they're updated a lot.
    "fallbackPolling": "dynamicPriority",

    // Don't coalesce watch notification
    "synchronousWatchDirectory": true,

    // Finally, two additional settings for reducing the amount of possible
    // files to track  work from these directories
    "excludeDirectories": ["**/node_modules", "_build"],
    "excludeFiles": ["build/fileWhichChangesOften.ts"]
  }
}

Дополнительные сведения см. в примечаниях к выпуску TypeScript 3.8.

Настройка отслеживания файлов с помощью переменной окружения TSC_WATCHFILE

Опция Описание
PriorityPollingInterval Использование fs.watchFile, но с различными интервалами опроса для исходных файлов, файлов конфигурации и отсутствующих файлов
DynamicPriorityPolling Использование динамической очереди, где часто изменяемые файлы опрашиваются с более короткими интервалами, а неизменные файлы — с меньшими интервалами
UseFsEvents Использование fs.watch. В операционных системах, ограничивающих количество активных отслеживаний, переключение на fs.watchFile в случае неудачного создания наблюдателя.
UseFsEventsWithFallbackDynamicPolling Использование fs.watch. В операционных системах, ограничивающих количество активных отслеживаний, переключение на динамические очереди опроса (как описано в DynamicPriorityPolling)
UseFsEventsOnParentDirectory Использование fs.watch для родительских каталогов включенных файлов (обеспечивая компромисс, который приводит к меньшему использованию процессора по сравнению с чистым fs.watchFile, но потенциально с меньшей точностью).
по умолчанию (без указанного значения) Если переменная окружения TSC_NONPOLLING_WATCHER установлена в значение true, используется UseFsEventsOnParentDirectory. В противном случае отслеживание файлов происходит с использованием fs.watchFile с 250ms в качестве тайм-аута для любого файла.

Настройка отслеживания каталогов с помощью переменной окружения TSC_WATCHDIRECTORY

Для отслеживания каталогов на платформах, которые не поддерживают рекурсивное отслеживание каталогов по умолчанию (то есть, не macOS и Windows), используется рекурсивное создание наблюдателей каталогов для каждого подкаталога с использованием различных параметров, выбранных в TSC_WATCHDIRECTORY.

ПРИМЕЧАНИЕ: На платформах, которые поддерживают рекурсивное отслеживание каталогов по умолчанию, значение TSC_WATCHDIRECTORY игнорируется.

Опция Описание
RecursiveDirectoryUsingFsWatchFile Использование fs.watchFile для отслеживания включенных каталогов и подкаталогов.
RecursiveDirectoryUsingDynamicPriorityPolling Использование динамической очереди опроса для опроса изменений в включенных каталогах и подкаталогах.
по умолчанию (без указанного значения) Использование fs.watch для отслеживания включенных каталогов и подкаталогов.

© 2012-2024 Microsoft
Licensed under the Apache License, Version 2.0.
https://www.typescriptlang.org/docs/handbook/configuring-watch.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API