Configuring Watch

컴파일러가 어떻게 파일과 디렉터리를 감시할지에 대해

  • TypeScript 3.8+: 컴파일러 플래그
  • 그보다 이전 버전: 환경 변수

를 사용하여 설정합니다.

배경 (Background)

컴파일러의 --watch 구현은 node에서 제공하는 fs.watchfs.watchFile에 의존하며, 이 두 방법 모두 장단점이 있습니다.

fs.watch는 파일 시스템 이벤트를 사용하여 파일/디렉터리의 변경 사항을 알립니다. 하지만 OS에 따라 다르며, 알림은 완전히 믿을 수가 없고, 많은 OS에서 예상대로 동작하지 않습니다. 또한, 생성할 수 있는 watcher의 수에 제한이 있을 수 있으며(예: linux), 파일 수가 많은 프로그램을 사용하면 매우 빠르게 소진할 수 있습니다. 그러나 이 작업은 파일 시스템 이벤트를 사용하기 때문에 CPU cycle에 많이 관여하진 않습니다. 컴파일러는 일반적으로 fs.watch를 사용하여 디렉터리를 감시합니다. (예: 설정 파일에 포함된 소스 디렉터리, 모듈 확인을 실패한 디렉터리 … 등) 변경 사항에 대한 알림에서 누락된 정밀도를 처리할 수 있습니다. 그러나 재귀 감시 기능은 Windows와 OSX에서만 지원됩니다. 즉, 다른 OS들은 재귀적 특성을 대체할 무언가가 필요합니다.

fs.watchFile은 폴링을 사용하므로 CPU 주기를 포함합니다. 하지만 이는 파일/디렉터리 상태에 대한 업데이트를 받을 수 있는 가장 신뢰할 수 있는 메커니즘입니다. 컴파일러는 일반적으로 fs.watchFile을 사용하여 소스 파일, 구성 파일 및 누락된 파일(누락된 파일 참조)을 감시하는데 이는 CPU 사용량이 프로그램의 파일 수에 따라 달라진다는 것을 의미합니다.

Configuring file watching using a tsconfig.json

{
// Some typical compiler options
"": "es2020",
"": "node"
// ...
},
// NEW: Options for file/directory watching
"watchOptions": {
// Use native file system events for files and directories
"": "useFsEvents",
"": "useFsEvents",
// Poll files for updates more frequently
// when they're updated a lot.
"": "dynamicPriority"
}
}

You can read more about this in the release notes.

환경 변수 TSC*WATCHFILE을 사용하여 파일 감시 설정 (Configuring file watching using environment variable TSC*WATCHFILE)

옵션 설명
PriorityPollingInterval fs.watchFile을 사용하지만 소스 파일, 설정 파일 및 누락된 파일에 대해 다른 폴링 주기(polling intervals)를 사용합니다.
DynamicPriorityPolling 자주 수정되는 파일을 자주 폴링하고 변경되지 않은 파일을 덜 자주 폴링 하는 동적 큐를 사용합니다.
UseFsEvents 파일 시스템 이벤트를 사용하는 fs.watch를 사용하여 파일 변경/생성/삭제에 대한 알림을 받습니다. (fs.watch는 OS마다 다르게 작동할 수 있습니다.) 예를 들어. 리눅스는 watcher 수에 제한이 있으며 fs.watch를 사용하여 watcher를 만들지 못하면, fs.watchFile를 대신 사용하여 watcher를 만들게 됩니다.
UseFsEventsWithFallbackDynamicPolling 이 옵션은 fs.watch를 사용하여 감시자를 만들지 못한 경우 폴링이 동적 큐를 통해 수행된다는 것을 제외하고는 UseFsEvents 옵션과 비슷합니다.(동적 큐에 대한 것은 DynamicPriorityPolling옵션에서 설명하였습니다.).
UseFsEventsOnParentDirectory 이 옵션은 fs.watch(파일 시스템 이벤트 사용하는)로 파일의 상위 디렉터리를 감시합니다. 다만, CPU 사용량이 늘어나고 정확도는 떨어질 수 있습니다.
default (no value specified) 환경 변수TSC*NONPOLLING*WATCHER가 true로 설정되면 파일의 상위 디렉터리를 감시합니다. (UseFsEventsOnParentDirectory와 동일).false 일 때는 fs.watchFile을 사용하여 250ms 시간 제한과 함께 모든 파일들을 감시합니다.

환경 변수TSC*WATCHDIRECTORY를 사용하여 디렉터리 감시 설정 (Configuring directory watching using environment variable TSC*WATCHDIRECTORY)

기본적으로 node에서 디렉터리의 재귀적인 감시를 지원하지 않는 플랫폼에서, 디렉터리 감시 기능은 TSC*WATCHDIRECTORY에서 선택한 다양한 옵션을 사용하여 하위 디렉터리에 대한 디렉터리 watcher를 재귀적으로 생성함으로써 지원됩니다. 기본적으로 재귀 디렉터리 감시(예: windows)를 지원하는 플랫폼에서는 이 환경 변수의 값이 무시됩니다.

옵션 설명
RecursiveDirectoryUsingFsWatchFile fs.watchFile을 사용하여 폴링 감시(CPU cycles 사용)인 디렉터리 및 하위 디렉터리를 감시합니다.
RecursiveDirectoryUsingDynamicPriorityPolling 동적 폴링 큐를 사용하여 디렉터리 및 하위 디렉터리에 대한 변경사항을 폴링 합니다.
default (no value specified) fs.watch를 사용하여 디렉터리 및 하위 디렉터리를 감시합니다.

The TypeScript docs are an open source project. Help us improve these pages by sending a Pull Request

Contributors to this page:
SNSheetal Nandi  (52)
  (6)
00xflotus  (1)
PKPhilip Kirkbride  (1)
3+

Last updated: 2024년 3월 18일