Configurando Watch

O compilador suporta configurar como observar arquivos e diretórios usando opções de compilador no Typescript 3.8+, e variáveis de ambiente antes dessa versão.

Contexto

A implementação --watch do compilador se apoia em usar fs.watch e fs.watchFile que são providos pelo node, ambos os métodos têm seus prós e contras.

fs.watch usa os eventos do file system para notificar as mudanças no arquivo/diretório. Mas isso depende do SO e a notificação não é completamente confiável e não funciona como esperado em vários SOs. Também pode haver um limite do número de observadores que podem ser criados, eg. linux, e nós poderíamos superar esse limite bem rápido com programas que incluem grandes números de arquivos. Mas, por usar os eventos do file system, não há tantos ciclos de CPU envolvidos. O compilador usa fs.watch tipicamente para observar diretórios (eg. diretórios fonte que são incluídos por um arquivo de configuração, diretório em que a resolução de módulos falhou etc.) estes podem lidar com a falta de precisão em notificação de mudanças. Mas observação recursiva é suportada apenas no Windows e no OSX. Isso significa que precisamos de algo para substituir a natureza recursiva em outros SOs.

fs.watchFile usa uma checagem de estado dos arquivos e por isso envolve ciclos de CPU. Mas essa é a forma mais confiável de se conseguir atualizações dos arquivos/diretórios. O compilador usa fs.watchFile tipicamente para observar arquivos fonte, arquivos de configuração e arquivos em falta (referências de arquivos falhas) e isso significa que o uso de CPU depende da quantidade de arquivos no programa.

Configurando observação de arquivos usando o tsconfig.json

{
// Algumas opções típicas do compilador
"": "es2020",
"": "node"
// ...
},
// NOVO: Opçoes para observação de arquivo/diretório
"watchOptions": {
// Usa os eventos nativos do file system para arquivos e diretórios
"": "useFsEvents",
"": "useFsEvents",
// Checka os arquivos buscando atualizações mais frequentemente
// quando eles são muito atualizados
"": "dynamicPriority"
}
}

Você pode ler mais sobre isso nas notas de atualização.

Configurando observação de arquivos usando variáveis de ambiente TSC_WATCHFILE

Opção Descrição
PriorityPollingInterval Usa fs.watchFile mas usa diferentes intervalos de checagem para arquivos fonte, arquivos de configuração e arquivos em falta
DynamicPriorityPolling Usa uma fila dinâmica onde os arquivos modificados mais frequentemente serão checados em menor intervalo e os que se mantem inalterados serão checados em um intervalo maior
UseFsEvents Usa o fs.watch que por sua vez usa os eventos de file system (mas pode não ser exato em diferentes SOs) para conseguir as notificações de mudança/criação/remoção de arquivos. Note que alguns SOs eg. linux tem um limite no número de observadores e a falha de criação de um observador com fs.watch resultará na criação de outro observador usando fs.watchFile
UseFsEventsWithFallbackDynamicPolling Essa opção é similar a UseFsEvents exceto na falha de criação de um observador usando fs.watch, a contingência de observação acontece por filas de checagem dinâmicas (como explicado em DynamicPriorityPolling)
UseFsEventsOnParentDirectory Essa opção observa o diretório pai do arquivo com fs.watch (usando eventos do file system) causando com que o uso de CPU seja baixo
default (nenhum valor especificado) Se a variável de ambiente TSC_NONPOLLING_WATCHER tem valor true, observa os diretórios pai dos arquivos (assim como UseFsEventsOnParentDirectory). De outra forma observa os arquivos usando fs.watchFile com 250ms como tempo limite para qualquer arquivo.

Configurando observação de diretório usando a variável de ambiente TSC_WATCHDIRECTORY

A observação de diretório em plataformas que não suportam observação recursiva de diretório nativamente em node é suportada por meio da criação recursiva de observadores de diretório para os diretórios filhos usando diferentes opções selecionadas pela variável ambiente TSC_WATCHDIRECTORY. Note que, em plataformas que suportam observação de diretórios recursivamente (e.g. windows), o valor dessa variável é ignorado.

Opção Descrição
RecursiveDirectoryUsingFsWatchFile Usa fs.watchFile para observar os diretórios e diretórios filhos o que torna isso uma observação por checagem de estado (consumindo ciclos de CPU).
RecursiveDirectoryUsingDynamicPriorityPolling Usa a fila de checagem de estado dinâmica para checar por mudanças nos diretórios e diretórios filhos.
default (sem valor especificado) Usa fs.watch para observar diretórios e diretórios filhos.

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)
Lluk3skyw4lker  (7)
LHLucas Henrique  (2)
OTOrta Therox  (1)
00xflotus  (1)
4+

Last updated: 24 de jun. de 2022