Product
Introducing License Enforcement in Socket
Ensure open-source compliance with Socket’s License Enforcement Beta. Set up your License Policy and secure your software!
The 'gaze' npm package is a file watcher that uses native OS events to notify you of changes to files and directories. It is useful for tasks such as automatically reloading a server, rebuilding assets, or running tests when files change.
Watch Files
This feature allows you to watch for changes in JavaScript files in the current directory. When a change is detected, it logs the event type and the file path.
const gaze = require('gaze');
gaze('*.js', function(err, watcher) {
if (err) throw err;
console.log('Watching files...');
this.on('all', function(event, filepath) {
console.log(event + ': ' + filepath);
});
});
Watch Directories
This feature allows you to watch for changes in JavaScript files within the 'lib' directory and its subdirectories. It logs the event type and the file path when a change is detected.
const gaze = require('gaze');
gaze('lib/**/*.js', function(err, watcher) {
if (err) throw err;
console.log('Watching directories...');
this.on('all', function(event, filepath) {
console.log(event + ': ' + filepath);
});
});
Get Watched Files
This feature allows you to retrieve a list of files currently being watched. It logs the list of watched files to the console.
const gaze = require('gaze');
gaze('*.js', function(err, watcher) {
if (err) throw err;
console.log('Watching files...');
console.log(this.watched());
});
Chokidar is a highly efficient and reliable file watcher that uses native OS events. It offers more features and better performance compared to 'gaze', including support for recursive watching, symlink following, and more robust handling of edge cases.
The 'watch' package is a simple file watcher that uses polling to detect changes. It is less efficient than 'gaze' and 'chokidar' but can be useful for simpler use cases where native OS events are not required.
Node-watch is another file watcher that uses native OS events. It is similar to 'gaze' but offers a simpler API and fewer features. It is suitable for basic file watching tasks.
A globbing fs.watch wrapper built from the best parts of other fine watch libs.
Compatible with Node.js 0.11/0.10/0.8, Windows, OSX and Linux.
Install the module with: npm install gaze
or place into your package.json
and run npm install
.
var gaze = require('gaze');
// Watch all .js files/dirs in process.cwd()
gaze('**/*.js', function(err, watcher) {
// Files have all started watching
// watcher === this
// Get all watched files
this.watched(function(watched) {
console.log(watched);
});
// On file changed
this.on('changed', function(filepath) {
console.log(filepath + ' was changed');
});
// On file added
this.on('added', function(filepath) {
console.log(filepath + ' was added');
});
// On file deleted
this.on('deleted', function(filepath) {
console.log(filepath + ' was deleted');
});
// On changed/added/deleted
this.on('all', function(event, filepath) {
console.log(filepath + ' was ' + event);
});
// Get watched files with relative paths
this.relative(function(err, files) {
console.log(files);
});
});
// Also accepts an array of patterns
gaze(['stylesheets/*.css', 'images/**/*.png'], function() {
// Add more patterns later to be watched
this.add(['js/*.js']);
});
var Gaze = require('gaze').Gaze;
var gaze = new Gaze('**/*');
// Files have all started watching
gaze.on('ready', function(watcher) { });
// A file has been added/changed/deleted has occurred
gaze.on('all', function(event, filepath) { });
gaze('**/*', function(error, watcher) {
if (error) {
// Handle error if it occured while starting up
}
});
// Or with the alternative interface
var gaze = new Gaze();
gaze.on('error', function(error) {
// Handle error here
});
gaze.add('**/*');
EMFILE
errorsBy default, gaze will use native OS events and then fallback to slower stat polling when an EMFILE
error is reached. Gaze will still emit or return the error as the first argument of the ready callback for you to handle.
It is recommended to advise your users to increase their file descriptor limits to utilize the faster native OS watching. Especially on OSX where the default descriptor limit is 256.
In some cases, native OS events will not work. Such as with networked file systems or vagrant. It is recommended to set the option mode: 'poll'
to always stat poll for those situations.
See isaacs's minimatch for more information on glob patterns.
patterns
{String|Array} File patterns to be matchedoptions
{Object}callback
{Function}
err
{Error | null}watcher
{Object} Instance of the Gaze watcherCreate a Gaze object by instancing the gaze.Gaze
class.
var Gaze = require('gaze').Gaze;
var gaze = new Gaze(pattern, options, callback);
options
The options object passed in.
interval
{integer} Interval to pass to fs.watchFiledebounceDelay
{integer} Delay for events called in succession for the same
file/eventmode
{string} Force the watch mode. Either 'auto'
(default), 'watch'
(force native events), or 'poll'
(force stat polling).cwd
{string} The current working directory to base file patterns from. Default is process.cwd()
.ready(watcher)
When files have been globbed and watching has begun.all(event, filepath)
When an added
, changed
or deleted
event occurs.added(filepath)
When a file has been added to a watch directory.changed(filepath)
When a file has been changed.deleted(filepath)
When a file has been deleted.renamed(newPath, oldPath)
When a file has been renamed.end()
When the watcher is closed and watches have been removed.error(err)
When an error occurs.nomatch
When no files have been matched.emit(event, [...])
Wrapper for the EventEmitter.emit.
added
|changed
|deleted
events will also trigger the all
event.close()
Unwatch all files and reset the watch instance.add(patterns, callback)
Adds file(s) patterns to be watched.remove(filepath)
removes a file or directory from being watched. Does not
recurse directories.watched([callback])
Returns the currently watched files.
callback
{function} Calls with function(err, files)
.relative([dir, unixify, callback])
Returns the currently watched files with relative paths.
dir
{string} Only return relative files for this directory.unixify
{boolean} Return paths with /
instead of \\
if on Windows.callback
{function} Calls with function(err, files)
.fs.watch
Wrapper?I liked parts of other fs.watch
wrappers but none had all the features I
needed when this library was originally written. This lib once combined the features I needed from other fine watch libs
but now has taken on a life of it's own (gaze doesn't wrap fs.watch
or fs.watchFile
anymore).
Other great watch libraries to try are:
In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using grunt.
relative()
and watched()
. Better error handling. Update to globule@0.2.0. No longer watches cwd
by default. Added mode
option. Better EMFILE
message. Avoids ENOENT
errors with symlinks. All constructor arguments are optional.end
before removeAllListeners.forceWatchMethod
option removed, bug fixes and watch optimizations (@rgaskill).added
events in current working dir.path.sep
. Add forceWatchMethod
option. Support renamed
events.cwd
option properlyCopyright (c) 2014 Kyle Robinson Young
Licensed under the MIT license.
FAQs
A globbing fs.watch wrapper built from the best parts of other fine watch libs.
The npm package gaze receives a total of 2,514,631 weekly downloads. As such, gaze popularity was classified as popular.
We found that gaze demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 3 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Product
Ensure open-source compliance with Socket’s License Enforcement Beta. Set up your License Policy and secure your software!
Product
We're launching a new set of license analysis and compliance features for analyzing, managing, and complying with licenses across a range of supported languages and ecosystems.
Product
We're excited to introduce Socket Optimize, a powerful CLI command to secure open source dependencies with tested, optimized package overrides.