#Node-watch A fs.watch wrapper to watch files or directories(recursively by default).
npm install node-watch
var watch = require('node-watch');
watch('somedir_or_somefile', function(filename) {
console.log(filename, ' changed.');
});
- 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 one time and then is seem to be unwatched.
- Missing an option to watch a directory recursively.
This module currently does not differentiate event like rename
or delete
. Once there is a change, the callback function will be triggered.
recursive
:Watch it recursively or not (defaults to true).
followSymLinks
: Follow symbolic links or not (defaults to false).
maxSymLevel
: The max number of following symbolic links, in order to prevent circular links (defaults to 1).
filter
: node-watch will only watch elements that pass the test implemented by the provided function. The filter function is provided with a full path string argument(defaults to (fullPath) => true
).
watch('somedir', { recursive: false, followSymLinks: true }, function(filename) {
console.log(filename, ' changed.');
});
Since v0.4.0 watch()
will return a fs.FSWatcher like object,
so you can close the watcher or detect change by change
event instead of the old callback function.
var watcher = watch('./');
watcher.on('change', function(file) {
//
});
watcher.on('error', function(err) {
//
});
// close
watcher.close();
###FAQ
watch(['file1', 'file2'], function(file) {
//
});
You can write your own filter function as a higher-order function. For example:
var filter = function(pattern, fn) {
return function(filename) {
if (pattern.test(filename)) {
fn(filename);
}
}
}
// only watch for js files
watch('mydir', filter(/\.js$/, function(filename) {
//
}));
Alternatively, supply a filter function in the options object. For example:
// don't watch node_modules folder
var options = {
filter : function(filename) {
return !/node_modules/.test(filename);
}
};
watch('mydir', options, function(filename) {
//
}));
The second approach helps avoiding the max open files limit