Rewatch is an alternative build system for the Rescript Compiler (which uses a combination of Ninja, OCaml and a Node.js script). It strives to deliver consistent and faster builds in monorepo setups. Bsb doesn't support a watch-mode in a monorepo setup, and when setting up a watcher that runs a global incremental compile it's consistent but very inefficient and thus slow.
We couldn't find a way to improve this without re-architecting the whole build system. The benefit of having a specialized build system is that it's possible to completely tailor it to ReScript and not being dependent of the constraints of a generic build system like Ninja. This allowed us to have significant performance improvements even in non-monorepo setups (30% to 3x improvements reported).
This project should be considered in beta status. We run it in production at Walnut. We're open to PR's and other contributions to make it 100% stable in the ReScript toolchain.
- Install the package
yarn add @rolandpeelen/rewatch
- Build / Clean / Watch
yarn rewatch build
yarn rewatch clean
yarn rewatch watch
You can pass in the folder as the second argument where the 'root' bsconfig.json lives. If you encounter a 'stale build error', either directly, or after a while, a clean may be needed to clean up some old compiler assets.
Find this output by running yarn rewatch --help.
Usage: rewatch [OPTIONS] [COMMAND] [FOLDER]
Arguments:
[COMMAND]
Possible values:
- build: Build using Rewatch
- watch: Build, then start a watcher
- clean: Clean the build artifacts
[FOLDER]
The relative path to where the main bsconfig.json resides. IE - the root of your project
Options:
-f, --filter <FILTER>
Filter allows for a regex to be supplied which will filter the files to be compiled. For instance, to filter out test files for compilation while doing feature work
-a, --after-build <AFTER_BUILD>
This allows one to pass an additional command to the watcher, which allows it to run when finished. For instance, to play a sound when done compiling, or to run a test suite. NOTE - You may need to add '--color=always' to your subcommand in case you want to output colour as well
-n, --no-timing <NO_TIMING>
[possible values: true, false]
-c, --create-sourcedirs <CREATE_SOURCEDIRS>
This creates a source_dirs.json file at the root of the monorepo, which is needed when you want to use Reanalyze
[possible values: true, false]
--compiler-args <COMPILER_ARGS>
--rescript-version <RESCRIPT_VERSION>
-h, --help
Print help (see a summary with '-h')
-V, --version
Print version
Pre-requisites:
- Rust
- NodeJS - For running testscripts only
- Yarn or Npm - Npm probably comes with your node installation
cd testrepo && yarn(install dependencies for submodule)cargo run
Running tests:
cargo build --release./tests/suite.sh