Blame view

node_modules/watchpack/README.md 2.95 KB
aaac7fed   liuqimichale   add
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
  # watchpack
  
  Wrapper library for directory and file watching.
  
  [![Build Status](https://travis-ci.org/webpack/watchpack.svg?branch=master)](https://travis-ci.org/webpack/watchpack) [![Build status](https://ci.appveyor.com/api/projects/status/e5u2qvmugtv0r647/branch/master?svg=true)](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