npm-run-all
A CLI tool to run multiple npm-scripts in parallel or sequential.
> npm-run-all clean lint build:*
Installation
npm install npm-run-all
- This package works in both Windows and UNIX-like environments.
- This package is tested in the follow node versions.
0.10
(requiresnpm >= 2.0.0
, so please runnpm install -g npm@latest
)0.12
4.x
5.x
Usage
Usage: npm-run-all [OPTIONS] [...tasks]
Run specified tasks.
Options:
-h, --help Print this text.
-p, --parallel [...tasks] Run a group of tasks in parallel.
-s, --sequential [...tasks] Run a group of tasks sequentially.
-v, --version Print version number.
--silent Set "silent" to the log level of npm.
Run tasks sequentially
npm-run-all build:html build:js
This is same as npm run build:html && npm run build:js
.
Note: If a task exited with non zero code, the following tasks are not run.
Run tasks in parallel
npm-run-all --parallel watch:html watch:js
This is same as npm run watch:html & npm run watch:js
.<br>
Of course, this works on Windows as well!
Note: If a task exited with non zero code, the other tasks and those descendant processes are killed with SIGTERM
(On Windows, with taskkill.exe /F /T
).
Run a mix of sequential and parallel tasks
npm-run-all clean lint --parallel watch:html watch:js
- First, this runs
clean
andlint
sequentially. - Next, runs
watch:html
andwatch:js
in parallell.
npm-run-all a b --parallel c d --sequential e f --parallel g h i
- First, runs
a
andb
sequentially. - Second, runs
c
andd
in parallell. - Third, runs
e
andf
sequentially. - Lastly, runs
g
,h
, andi
in parallell.
Run with arguments
npm-run-all "delay 3000" --parallel watch:*
npm-run-all --parallel "build:* -- --watch"
We can enclose a script name or a pattern in quotes to use arguments. When you use a pattern, arguments are forwarded to every matched task.
An example: https://gist.github.com/mysticatea/34949629c9e0a01a9e7d<br> See also: https://docs.npmjs.com/cli/run-script
Glob-like pattern matching for task names
npm-run-all --parallel watch:*
In this case, runs sub tasks of watch
. e.g. watch:html
, watch:js
.
But, doesn't run sub-sub tasks. e.g. watch:js:index
.
npm-run-all
reads the actual npm-script list from package.json
in the current directory.
npm-run-all --parallel watch:**
If we use a globstar **
, runs both sub tasks and sub-sub tasks.
This matching rule is similar to glob.
The Difference is one -- the separator is :
, instead of /
.
Node API
var runAll = require("npm-run-all");
runAll
var promise = runAll(patterns, options);
Run npm-scripts.
- patterns
string|string[]
-- Glob-like patterns for task names. - options
object
- options.parallel
boolean
-- A flag to run tasks in parallel. Default isfalse
. - options.stdin
stream.Readable|null
-- A readable stream to send to the stdin of npm-scripts. Default is nothing. Setprocess.stdin
in order to send from stdin. - options.stdout
stream.Writable|null
-- A writable stream to receive from the stdout of npm-scripts. Default is nothing. Setprocess.stdout
in order to print to stdout. - options.stderr
stream.Writable|null
-- A writable stream to receive from the stderr of npm-scripts Default is nothing. Setprocess.stderr
in order to print to stderr. - options.taskList
string[]|null
-- A string array that is all task names. By default, reads frompackage.json
in the current directory. - options.packageConfig
object|null
-- A map-like object to overwrite package configs. Keys are package names. Every value is a map-like object (Pairs of variable name and value). e.g.{"npm-run-all": {"test": 777, "test2": 333}}
Default isnull
. - options.silent
boolean
-- The flag to setsilent
to the log level of npm. Default isfalse
.
- options.parallel
runAll
returns a promise that becomes fulfilled when all tasks are completed.
The promise will become rejected when any of the tasks exit with a non-zero code.
See also: https://doc.esdoc.org/github.com/mysticatea/npm-run-all/