rbuild
A make
-like tool with a few additional conventions and conveniences.
Example
build.task("tbd")
Command-line Usage
-w, --watch
- runs in watch mode: will run the given task then poll all the dependent files and rerun the top-level task whenever-f, --force
- ignores timestamps and forces all tasks to be run. When combined with the watch option, the force option only applies to the first run of the tasks-h, --help
- describes the tasks-d, --describe
, - outputs a detailed JSON dependency graph
rbuild.config.js
The configuration file has the following properties:
- Interpreted as ES6 JavaScript
- The
build
variable is exposed as a global - The environment variables are exposed as the map
ENV
API
Builds are described in a file named rbuild.config.js
. This exports two special variables build
and ENV
. It is also compiled as ES6 Javascript.
build
task(name)
- create a new named taskinclude(directory)
- add in the tasks and commands from another rbuild.configaddCmd(name, { desc })
- add a custom named command
Task
describe(msg)
- give the task a brief descriptiondeps([ dependencies ])
- ordered list of dependencies of this taskwatch([ dependencies ])
- dependencies that should retrigger this task in watch modeshell(command)
- run the command string via the shellexec(process, [ args ], { options })
- run an executable outside the shellcmd(name, ...)
- run a command registered with addCmd
task(name)
Create a new named task.
build.task("test")
describe(msg)
build.task("test")
.describe("runs all the unit tests")
.shell("npm run test")
deps(deps)
build.task("test")
.describe("runs all the unit tests")
.deps([ "build", "lint" ])
.shell("npm run test")
shell(command)
Runs a command or array of commands as bash scripts. rbuild
will go out of its way to try to run these commands with bash (e.g. using MinGW on Windows).
shell(command)
shell([ commands ])
build.task("test")
.describe("runs all the unit tests")
.deps([ "build", "lint" ])
.shell("npm run test")
build.task("test")
.describe("runs all the unit tests")
.deps([ "build", "lint" ])
.shell([
"npm run test-fast",
"npm run test-slow",
]);
As rbuild
compiles the source files using ES6 syntax, the long-string form can be used to construct full scripts inline in the rbuild.config.js
file:
build.task("<tbd>")
.shell(`\
set -e
echo
echo Hello World
echo
gcc -c myfile.cc -o myfile.o
`)
exec(cmdName, ...args, options)
The exec
command explicitly launches a new process without going through a sub-shell.
build.task("test")
.describe("runs all the unit tests")
.deps([ "build", "lint" ]
.exec("go", "build", "...", { })
subtasks(arr, opts, cb(task))
Creates a new anonymous child task for each element in the array. The child task is automatically a dependency of the named parent task.
var glob = require("glob");
build.task("compile-less")
.subtasks(glob.sync("assets/style/*.less"), (task, filename) => {
task.shell(`lessc ${fileanme}`)
})