# watchlist **Repository Path**: mirrors_TehShrike/watchlist ## Basic Information - **Project Name**: watchlist - **Description**: Recursively watch a list of directories & run a command on any file system changes - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-06-30 - **Last Updated**: 2025-12-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README
watchlist
version CI downloads install size
Recursively watch a list of directories & run a command on any file system changes
## Features * Extremely lightweight * Simple [`fs.watch`](https://nodejs.org/api/fs.html#fs_fs_watch_filename_options_listener) wrapper * Runs on macOS, Linux, and Windows * Recursively monitors all subdirectories * Optional ignore patterns > While `fs.watch` has its inconsistencies, efforts are made to normalize behavior across platforms. ## Install ``` $ npm install --save-dev watchlist ``` ## Usage ***CLI*** ```sh # Run `npm test` on changes within "src" and "test" contents change $ watchlist src test -- npm test # Run `npm test` on changes within "packages", ignoring /fixtures/i $ watchlist packages --ignore fixtures -- npm test # Run `lint` script on ANY change $ watchlist -- npm run lint ``` ***API*** ```js import { watch } from 'watchlist'; async function task() { console.log('~> something updated!'); await execute_example(); // linter, tests, build, etc } // Run `task()` when "{src,test}/**/*" changes // Must also ignore changes to any `/fixture/i` match await watch(['src', 'test'], task, { ignore: 'fixtures' }); ``` ## CLI The `watchlist` binary expects the following usage: ```sh $ watchlist [...directory] [options] -- ``` > **Important:** The `--` is required! It separates your `command` from your `watchlist` arguments. Please run `watchlist --help` for additional information. ## API ### watch(dirs: string[], handler: Function, options?: Options) Returns: `Promise` Watch a list of directories recursively, calling `handler` whenever their contents are modified. #### dirs Type: `Array` The list of directories to watch. May be relative or absolute paths.
All paths are resolved from the `opts.cwd` location. #### handler Type: `Function` The callback function to run. > **Note:** This may be a Promise/`async` function. Return values are ignored. #### options.cwd Type: `String`
Default: `.` The current working directory. All paths are resolved from this location.
Defaults to `process.cwd()`. #### options.ignore Type: `String` or `RegExp` or `Array` A list of patterns that should **not** be watched nor should trigger a `handler` execution.
Ignore patterns are applied to file and directory paths alike. > **Note:** Any `String` values will be converted into a `RegExp` automatically. #### options.clear Type: `Boolean`
Default: `false` Whether or not the `console` should be cleared before re-running your `handler` function. > **Note:** Defaults to `true` for the CLI! Pass `--no-clear` to disable. #### options.eager Type: `Boolean`
Default: `false` When enabled, runs the `command` one time, after `watchlist` has initialized. When disabled, a change within the `dirs` list must be observed before the first `command` execution. ### run(command: string, ...args) Returns: `Promise` All arguments to `watchlist.run` are passed to [`child_process.exec`][child_exec] directly. > **Note:** Any `stdout` or `stderr` content will be piped/forwarded to your console. #### command Type: `String` The command string to execute.
View [`child_process.exec`][child_exec] for more information. #### args Type: `String` Additional [`child_process.exec`][child_exec] arguments. > **Important:** The `callback` argument is not available! ## License MIT © [Luke Edwards](https://lukeed.com) [child_exec]: https://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback