watch-spawn
Version:
Watch specific files or directories and re-execute a given command, using `child_process.spawn` instead of the original `child_process.exec` to have a bit more of control. Forked from `watch-run` by `queckezz`
73 lines (48 loc) • 2.84 kB
Markdown
**Important**
This is a fork from `watch-run` that uses `spawn` instead of `exec` internally for the following reasons:
- spawn does not have a buffer limit for stdout
- spawn does not loses colored output when terminal allows it
- add option to specify several patterns passing several times the `-p, --pattern` option all the options will be
aggregated into a single array to pass to Gaze.
- add option to react only on certain events: `added`, `changed`, `deleted` or `renamed`.
- add verbose info, use `-q, --quiet` to reduce the noise. (the info about when the command is run and when it finish will always be printed regardless the value of `--quiet`)
- add option to skip executing the command if the command is already running `-k, --skip-if-running`.
Everything else is the same as the origina watch-run
# watch-spawn(1)
> Re-execute a given command everytime something changes in a specific directory. Build upon [gaze](https://github.com/shama/gaze).
## Installation
$ npm install -g watch-spawn
## Usage
Via `--help`:
```
Usage: watch-spawn <cmd>
Options:
-h, --help output usage information
-p, --pattern [pattern] glob pattern. More info: https://github.com/isaacs/minimatch
-i, --initial run <cmd> on initial startup
-d, --delay <n> delay execution of <cmd> for a number of milliseconds
-s, --stop-on-error stop watching and exit when errors occur in <cmd>
-f, --fire-on-events <events> fire only on the events provided: `added`, `changed` or `deleted`
-q, --quiet be as quiet as possible
-k, --skip-if-running skip if currently executing the <cmd>
Examples:
# watch dir and execute cmd
$ watch-spawn -p 'lib/**' cat package.json
```
## Examples
```bash
# listen to changes on js/modules/**/*.js and execute browserify
watch-spawn -p 'js/modules/**/*.js' browserify main.js -o public/build.js
# listen only to `added`, `deleted` events and execute browserify
watch-spawn -f 'added, deleted' -p 'js/modules/**/*.js' browserify main.js -o public/build.js
# all of previous but execute the command first and then wait to see if execute in again on any change
watch-spawn -f 'added, deleted' -p 'js/modules/**/*.js' -i browserify main.js -o public/build.js
# all of previous but wait 4 seconds before executing the command (except the first time)
watch-spawn -f 'added, deleted' -p 'js/modules/**/*.js' -i -d 4000 browserify main.js -o public/build.js
# all of previous and quiet
watch-spawn -q -f 'added, deleted' -p 'js/modules/**/*.js' -i -d 4000 browserify main.js -o public/build.js
# all of previous and skip if the command is already running
watch-spawn -k -q -f 'added, deleted' -p 'js/modules/**/*.js' -i -d 4000 browserify main.js -o public/build.js
```
## License
MIT