node-watch ![Status](https://travis-ci.org/yuanchuan/node-watch.svg?branch=master)
A wrapper and enhancements for fs.watch (with 0 dependencies).
![NPM](https://nodei.co/npm/node-watch.png?downloads=true&downloadRank=true&stars=true)
Installation
npm install node-watch
Example
var watch = require('node-watch');
watch('file_or_dir', { recursive: true }, function(evt, name) {
console.log('%s changed.', name);
});
This is a completely rewritten version, much faster and in a more memory-efficient way.
So with recent nodejs under OS X or Windows you can do something like this:
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.
Events
The events provided by the callback function is either update
or remove
, which is less confusing to fs.watch
's rename
and change
.
watch('./', function(evt, name) {
if (evt == 'update') {
}
if (evt == 'remove') {
}
});
Options
The usage and options of node-watch
is fully compatible with fs.watch.
persistent: <Boolean>
default = truerecursive: <Boolean>
default = falseencoding: <String>
default = 'utf8'
filter: <RegExp | Function>
filter using regular expression or custom function.
watch('./', { filter: /\.json$/ }, console.log);
watch('./', {
recursive: true,
filter: function(name) {
return !/node_modules/.test(name);
}
}, console.log);
Watcher object
The 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) {
});
watcher.on('error', function(err) {
});
watcher.close();
watcher.isClosed()
The watcher object is also an instance of EventEmitter.
This's a list of methods for watcher specifically:
.on
.once
.emit
.close
.listeners
.setMaxListeners
.getMaxListeners
.isClosed
detect if the watcher is closed
Known issues
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. Customize watch command line tool
#!/usr/bin/env node
require('epipebomb')();
var watcher = require('node-watch')(
process.argv[2] || './', { recursive: true }, console.log
);
process.on('SIGINT', watcher.close);
Monitoring chrome from disk:
$ watch / | grep -i chrome
License
MIT
Copyright (c) 2012-2017 yuanchuan