A observação de alterações em um arquivo ou diretório é uma parte importante da automação. Todos nós gostamos de usar o recurso “watch” do nosso pré-processador de CSS favorito: ainda podemos atualizar a página e ver nossas alterações como se estivéssemos simplesmente escrevendo em CSS puro. O Node.js facilita a observação de arquivos e diretórios, mas é um pouco mais difícil do que o senhor imagina.
Simplificando: os recursos de observação do Node.js ainda não são consistentes ou de alto desempenho, o que faz com que o admite. A boa notícia: um utilitário chamado chokidar estabiliza a observação de arquivos e fornece informações adicionais sobre o que aconteceu. O chokidar fornece uma grande quantidade de ouvintes; em vez de fornecer exemplos reduzidos e enfadonhos, veja o que o chokidar fornece aos senhores:
var chokidar = require('chokidar'); var watcher = chokidar.watch('file, dir, or glob', { ignored: /[\/\\]\./, persistent: true }); var log = console.log.bind(console); watcher .on('add', function(path) { log('File', path, 'has been added'); }) .on('addDir', function(path) { log('Directory', path, 'has been added'); }) .on('change', function(path) { log('File', path, 'has been changed'); }) .on('unlink', function(path) { log('File', path, 'has been removed'); }) .on('unlinkDir', function(path) { log('Directory', path, 'has been removed'); }) .on('error', function(error) { log('Error happened', error); }) .on('ready', function() { log('Initial scan complete. Ready for changes.'); }) .on('raw', function(event, path, details) { log('Raw event info:', event, path, details); }) // 'add', 'addDir' and 'change' events also receive stat() results as second // argument when available: http://nodejs.org/api/fs.html#fs_class_fs_stats watcher.on('change', function(path, stats) { if (stats) console.log('File', path, 'changed size to', stats.size); }); // Watch new files. watcher.add('new-file'); watcher.add(['new-file-2', 'new-file-3', '**/other-file*']); // Un-watch some files. watcher.unwatch('new-file*'); // Only needed if watching is `persistent: true`. watcher.close(); // One-liner require('chokidar').watch('.', {ignored: /[\/\\]\./}).on('all', function(event, path) { console.log(event, path); });
Que riqueza de recursos, especialmente quando o senhor já experimentou os perigos da funcionalidade de observação do `fs`. A observação de arquivos é essencial para o desenvolvimento contínuo e o chokidar facilita a vida!