just-wait

Wait for a file or directory to change then just return

Usage no npm install needed!

<script type="module">
  import justWait from 'https://cdn.skypack.dev/just-wait';
</script>

README

just-wait v1.0.11

version license installs

Waits for a file or directory to change or appear, then just returns. The watched file or directory does not have to exist yet.

Installation

To use just-wait from the command-line, install it globally:

npm install -g just-wait

To make sure your package is portable, also install it locally:

npm install --save-dev just-wait

Usage

# Use --help or -h to see usage details
$ just-wait --help
Usage: just-wait [options]

  Options:

    -h, --help                  output usage information
    -p, --pattern <pattern>     glob pattern. "," separates multiple patterns.
                                More info: https://github.com/isaacs/minimatch
    -d, --delay <milliseconds>  delay returning for a number of milliseconds
    -t, --timeout <seconds>     timeout waiting after a number of seconds (default=30)
    -s, --silent                suppress logging.

  Examples:

    # watch "lib" dir, return when something changes
    $ just-wait -p "lib/**"

    # watch "lib" and "src" dirs, return 500ms after something changes
    $ just-wait -p "lib/**,src/**" -d 500

    # watch "lib" dir, timeout after 10 seconds
    $ just-wait -p "lib/**,src/**" -t 10

In the case of a timeout, just-wait will return with exit code 1. In other cases it will return with exit code 0

From package.json

just-wait is usually used in the scripts section of package.json, to wait for some other, parallel task to create or change a file.

An example might be bundling your server code with the --watch flag. This makes webpack watch for changes... but it also means the command does not return so how do we actually start our server after the initial build has succeeded? Simple! We just wait for server.js to have been created!

{
  "scripts": {
    "build": "webpack -p",
    "build-dev": "webpack -d --watch",
    "start": "node server.js",
    "start-dev": "just-wait -p \"server.js\" && npm run start",
    "dev": "run-p --silent build-dev start-dev"
  }
}

Running npm run dev will run the build-dev and start-dev commands in parallel. The start-dev command then uses just-wait to wait for server.js to appear or change.

Logging

By default just-wait will log two messages to the terminal to provide feedback to the user:

$ just-wait -p README.md && echo Done!
Waiting for README.md (max 30 seconds)
Ready. README.md changed
Done!
$

or, in the case of timeout:

$ just-wait -p README.md --timeout 10 && echo Done!
Waiting for README.md (max 10 seconds)
Timed out waiting for README.md after 10 seconds.
$

It uses ulog for logging, which allows us to influence logging verbosity. The Waiting for.. line is logged at level INFO (which means it is visible at ulog's default log level of INFO), the success message is logged at WARN and the error message is logged at level ERROR. You can change the log level by setting the environment variable LOG, or you can completely suppress logging by passing the --silent (or -s) flag.

Credits

Based off of Rick Wong's wait-run, this simplified version just waits for the file or directory to appear/change and then returns. It does not execute any commands. Use it by chaining commands after it using &&, which works under *nix as well as Windows.

Credits also go to Fabian Eichenberger, who created watch-run, which was the basis for Rick's version.

Special thanks to Mark Reynolds for making all our lives easier with his contribution.

Copyright

License