使用Node.JS监听文件夹变化

使用Node.JS监听文件夹改变有许多应用场合,好比:javascript

构建自动编绎工具html

当源文件改变时,自动运行build过程,好比当你写CoffeeScript文件或SASS CSS文件时,保存以后可即时生成对应的JS或CSS.java

构建自动布署工具

经过侦听源文件夹的改变,你能够自动即时将改后的文件布署到测试服务器,加快你的开发测试速度。node

这些工具其实都须要侦听文件夹的改变,基于Node.JS的侦听文件夹改变的模块有不少。git

fs.watch

其中Node.JS的文件系统也可侦听某个目录的改变, 如 fs.watch github

fs.watch('somedir', function (event, filename) {
  console.log('event is: ' + event);
  if (filename) {
    console.log('filename provided: ' + filename);
  } else {
    console.log('filename not provided');
  }
});

其中fs.watch的最大缺点就是不支持子文件夹的侦听,而且在不少状况下会侦听到两次事件(不少编辑器在保存的时侯是先把原文件清空,再进行保存,所以会触发两次文件夹改变事件)。所以须要一些开源的模块来监听文件夹目录的改变。npm

chokidar

chokidar  是一个基于node.JS的监听文件夹改变模块。api

安装服务器

npm install chokidar

示例app

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); })


watch

Watch 是另外一个监听文件夹改变的Node.JS模块

安装

npm install watch

npm install watch

示例,侦听全部改变事件

watch.watchTree('/home/mikeal', function (f, curr, prev) {
    if (typeof f == "object" && prev === null && curr === null) {
      // Finished walking the tree
    } else if (prev === null) {
      // f is a new file
    } else if (curr.nlink === 0) {
      // f was removed
    } else {
      // f was changed
    }
})

示例,侦听不一样事件

var watch = require('watch')
watch.createMonitor('/home/mikeal', function (monitor) {
    monitor.files['/home/mikeal/.zshrc'] // Stat object for my zshrc.
    monitor.on("created", function (f, stat) {
      // Handle new files
    })
    monitor.on("changed", function (f, curr, prev) {
      // Handle file changes
    })
    monitor.on("removed", function (f, stat) {
      // Handle removed files
    })
    monitor.stop(); // Stop watching
})
相关文章
相关标签/搜索