JSPM

  • Created
  • Published
  • Downloads 856550
  • Score
    100M100P100Q173238F
  • License MIT

A neat fs.watch wrapper

Package Exports

  • node-watch

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (node-watch) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

node-watch Status

A neat fs.watch wrapper.

NPM

Installation

npm install node-watch

Example

var watch = require('node-watch');

watch('somedir_or_somefile', { recursive: true }, function(evt, name) {
  console.log(name, ' changed.');
});

This is a completely rewritten version, much faster and in a more memory-efficient way. So with recent nodejs versions under OS X or Windows you can do something like this:

// watch the whole disk
watch('/', { recursive: true }, console.log);

Why?

  • Some editors will generate temporary files which will cause the callback function to be triggered multiple times.
  • When watching a single file the callback function will only be triggered once.
  • Missing an option to watch a directory recursively.
  • Recursive watch is not supported on Linux or in older versions of nodejs.

Changelog

  • The recursive option is default to be false since v0.5.0.
  • The callback function will always provide a event name since v0.5.0.
  • Returns a fs.FSWatcher like object since v0.4.0.

Events

The events provided by the callback function would be either update or remove.

watch('./', function(evt, name) {

  if (evt == 'remove') {
    // on delete
  }

  if (evt == 'update') {
    // on create or modify
  }

});

Watcher object

watch function returns a fs.FSWatcher like object as the same as fs.watch (>= v0.4.0).

var watcher = watch('./', { recursive: true });

watcher.on('change', function(evt, name) {
  // callback
});

watcher.on('error', function(err) {
  // handle error
});

// close
watcher.close();

Extra options

  • filter Filter files or directories or skip to watch them.
var options = {
  recursive: true,
  filter : function(name) {
    return !/node_modules/.test(name);
  }
};

// ignore node_modules
watch('./', options, console.log);

Known bugs

Windows, node < v4.2.5

  • Failed to detect remove event
  • Failed to get deleted filename or directory name

Misc

1. Watch multiple files or directories in one place
watch(['file1', 'file2'], console.log);
2. Other ways to filter

a) filtering directly inside the callback function:

watch('./', { recursive: true }, function(evt, name) {
  // ignore node_modules
  if (!/node_modules/.test(name)) {
    // do something
  }
});

b) filtering with higher order function:

function filter(pattern, fn) {
  return function(evt, name) {
    if (pattern.test(name)) {
      fn.apply(null, arguments);
    }
  }
}

// watch only for js files
watch('./', filter(/\.js$/, console.log));

License

Licensed under MIT

Copyright (c) 2012-2017 yuanchuan