123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- # watchpack
- Wrapper library for directory and file watching.
- [](https://travis-ci.org/webpack/watchpack) [](https://ci.appveyor.com/project/sokra/watchpack/branch/master) [![Test coverage][coveralls-image]][coveralls-url]
- ## Concept
- watchpack high level API doesn't map directly to watchers. Instead a three level architecture ensures that for each directory only a single watcher exists.
- * The high level API requests `DirectoryWatchers` from a `WatcherManager`, which ensures that only a single `DirectoryWatcher` per directory is created.
- * A user-faced `Watcher` can be obtained from a `DirectoryWatcher` and provides a filtered view on the `DirectoryWatcher`.
- * Reference-counting is used on the `DirectoryWatcher` and `Watcher` to decide when to close them.
- * The real watchers (currently chokidar) are created by the `DirectoryWatcher`.
- * Files are never watched directly. This should keep the watcher count low.
- * Watching can be started in the past. This way watching can start after file reading.
- * Symlinks are not followed, instead the symlink is watched.
- ## API
- ``` javascript
- var Watchpack = require("watchpack");
- var wp = new Watchpack({
- // options:
- aggregateTimeout: 1000
- // fire "aggregated" event when after a change for 1000ms no additional change occurred
- // aggregated defaults to undefined, which doesn't fire an "aggregated" event
- poll: true
- // poll: true - use polling with the default interval
- // poll: 10000 - use polling with an interval of 10s
- // poll defaults to undefined, which prefer native watching methods
- // Note: enable polling when watching on a network path
- ignored: /node_modules/,
- // anymatch-compatible definition of files/paths to be ignored
- // see https://github.com/paulmillr/chokidar#path-filtering
- });
- // Watchpack.prototype.watch(string[] files, string[] directories, [number startTime])
- wp.watch(listOfFiles, listOfDirectories, Date.now() - 10000);
- // starts watching these files and directories
- // calling this again will override the files and directories
- wp.on("change", function(filePath, mtime) {
- // filePath: the changed file
- // mtime: last modified time for the changed file
- });
- wp.on("aggregated", function(changes) {
- // changes: an array of all changed files
- });
- // Watchpack.prototype.pause()
- wp.pause();
- // stops emitting events, but keeps watchers open
- // next "watch" call can reuse the watchers
- // Watchpack.prototype.close()
- wp.close();
- // stops emitting events and closes all watchers
- // Watchpack.prototype.getTimes()
- var fileTimes = wp.getTimes();
- // returns an object with all know change times for files
- // this include timestamps from files not directly watched
- // key: absolute path, value: timestamp as number
- ```
- [coveralls-url]: https://coveralls.io/r/webpack/watchpack/
- [coveralls-image]: https://img.shields.io/coveralls/webpack/watchpack.svg
|