当前位置:嗨网首页>书籍在线阅读

06-文件系统监听器

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

6.3.2 文件系统监听器

应用程序“监听”文件或目录的变化并根据变化执行一些任务,这种做法并不稀奇。 fs.FSWatcher 是Node中处理这件事的接口。不幸的是,Node开发人员注意到,这个方法在各平台上的表现不一致,而且并不总是有效。

我会跳过 fs.FSWatcher 的介绍,以及与之关联的用于返回对象的 fs.watch()函数 。相反,我会介绍第三方模块:在一个月的时间里下载量达到200万以上的Chokidar。这个模块是众多被广泛使用的模块之一(它已被并入非常受欢迎的应用程序Gulp中)。

用下面的命令进行安装(添加 –g 可以全局安装):

npm install chokidar

下面的代码会给当前目录添加一个监听器,它会检查目录和文件的变化。该监听器执行递归监听,提取目录中新添加的子目录和子目录中所有的新文件。原始的操作系统事件会监听所有的操作系统事件,而其他事件处理器则会监听更高级别的事件。

var chokidar = require('chokidar');
var watcher = chokidar.watch('.', {
  ignored: /[\/\\]\./,
  persistent: true
}); 
var log = console.log.bind(console);
watcher
  .on('add', function(path) { log('File', path, 'has been added'); })
  .on('unlink', function(path) { log('File', path, 'has been removed'); })
  .on('addDir', function(path) { log('Directory', path, 'has been added'); })
  .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); });
watcher.on('change', function(path, stats) {
  if (stats) log('File', path, 'changed size to', stats.size);
});

在控制台中可以看到添加、删除文件或目录(这些操作也改变了文件大小)的日志。 unlink()unlinkDir() 函数直观地反映出“删除”就意味着对象不再被链接到当前目录了。如果这正好是绑定到文件/子目录的最后一个连接,那么就表示它们被删除了。

捕捉所有原始事件可能会产生相当庞大的输出。不过,在第一次接触Chokidar时,最好仔细看看。