Monitoramento de Arquivos em Tempo Real em Node.js com fs.watch
Acompanhar alterações em arquivos de configuração ou diretórios de dados sem precisar reiniciar a aplicação é essencial para criar sistemas reativos e dinâmicos. O método nativo fs.watch do Node.js resolve esse problema ao monitorar o sistema de arquivos em tempo real e disparar eventos imediatamente quando um arquivo é modificado, renomeado ou excluído.
JavaScript
const fs = require('fs');
const path = require('path');
/**
* Inicia o monitoramento de alterações em um arquivo ou diretório.
* @param {string} caminhoAlvo - Caminho do arquivo/diretório a ser monitorado.
*/
function monitorarArquivo(caminhoAlvo) {
console.log(`[Watcher] Monitorando alterações em: ${caminhoAlvo}`);
// Registra o observador de arquivos no sistema de arquivos nativo
const watcher = fs.watch(caminhoAlvo, (evento, nomeArquivo) => {
if (nomeArquivo) {
console.log(`[Evento: ${evento}] Alteração detectada no arquivo: ${nomeArquivo}`);
} else {
console.log(`[Evento: ${evento}] Alteração detectada no alvo.`);
}
});
// Trata erros de permissão ou inexistência do arquivo
watcher.on('error', (erro) => {
console.error('[Erro no Watcher]:', erro.message);
});
}
// --- Exemplo Prático de Uso ---
const arquivoConfig = path.join(__dirname, 'configuracao.json');
// Garante que o arquivo de teste exista antes de monitorar
fs.writeFileSync(arquivoConfig, JSON.stringify({ versao: '1.0.0' }));
// Ativa o monitoramento
monitorarArquivo(arquivoConfig);
// Simula uma alteração assíncrona no arquivo após 1,5 segundo
setTimeout(() => {
fs.writeFileSync(arquivoConfig, JSON.stringify({ versao: '1.0.1' }));
}, 1500);
Pontos-chave
- Eventos Nativos do Sistema: O
fs.watchutiliza APIs nativas do sistema operacional (inotifyno Linux,FSEventsno macOS eReadDirectoryChangesWno Windows), garantindo alta performance e baixo uso de CPU. - Tipos de Eventos (
eventType): Retorna principalmente'change'(conteúdo modificado) ou'rename'(arquivo criado, deletado ou renomeado no diretório). - Inconsistência Transversal em SOs: O parâmetro
nomeArquivono callback não é garantido em todas as plataformas; para monitoramentos complexos e reativos em produção, considere bibliotecas de abstração comochokidar. - Disparos Duplicados (Debounce): Alterações de arquivos em alguns sistemas operacionais podem disparar múltiplos eventos
'change'consecutivos para uma única gravação; recomenda-se aplicar uma técnica de debounce caso a operação de resposta seja pesada.
