CLI tool to run multiple npm-scripts fast. Supports madly comfortable π Madrun.
npm i redrun -g
Usage: redrun [...tasks] [options] [-- ...args]
Options:
-p, --parallel run scripts in parallel
-s, --series run scripts in series
-q, --quiet do not output result command before execution
-c, --calm return zero exit code when command completed with error
-P, --parallel-calm run scripts in parallel and return zero exit code
-S, --series-calm run scripts in series and return zero exit code
-h, --help display this help and exit
-v, --version output version information and exit
You can enable tab-completion of npm scripts similar to npm's completion using:
redrun-completion >> ~/.bashrc
redrun-completion >> ~/.zshrcYou may also pipe the output of redrun-completion to a file such as /usr/local/etc/bash_completion.d/redrun if you have a system that will read that file for you.
{
"one": "npm run two",
"two": "npm run three",
"three": "echo 'hello'"
}Usually this expressions would be executed one-by-one this way:
coderaiser@cloudcmd:~/redrun$ npm run one
> [email protected] one /home/coderaiser/redrun
> npm run two
> [email protected] two /home/coderaiser/redrun
> npm run three
> [email protected] three /home/coderaiser/redrun
> echo 'hello'
helloUsually all this steps is slow, because every npm run it is a new process.
We use npm run for comfort of build tools of yesterday (like gulp and grunt) but without their weaknesses
(a lot dependencies and plugins management frustrations)
What redrun does is expand all this commands into one (which is much faster):
coderaiser@cloudcmd:~/redrun$ redrun one
> echo 'hello'
hello
Redrun could be used via command line, scripts section of package.json or programmaticly.
import redrun from 'redrun';
await redrun('one', {
one: 'npm run two',
two: 'npm run three',
three: `echo 'hello'`,
});
// returns
`echo 'hello'`;
await redrun('one', {
one: 'redrun -p two three',
two: 'redrun four five',
three: `echo 'hello'`,
four: 'jshint lib',
five: 'jscs test',
});
// returns
`jshint lib && jscs test & echo 'hello'`;The less spend time is better:
npm-run-all: 1m12.570snpm run && npm run: 1m10.727sredrun: 0m38.312s
Here are logs:
coderaiser@cloudcmd:~/redrun$ time npm run speed:npm-run-all
> speed:npm-run-all /home/coderaiser/redrun
> npm-run-all lint:*
> [email protected] lint:jshint /home/coderaiser/redrun
> jshint bin lib test
> [email protected] lint:eslint-bin /home/coderaiser/redrun
> eslint --rule 'no-console:0' bin
> [email protected] lint:eslint-lib /home/coderaiser/redrun
> eslint lib test
> [email protected] lint:jscs /home/coderaiser/redrun
> jscs --esnext bin lib test
real 1m12.570s
user 0m14.431s
sys 0m17.147scoderaiserser@cloudcmd:~/redrun$ time npm run speed:npm-run
[email protected] speed:npm-run /home/coderaiser/redrun
> npm run lint:jshint && npm run lint:eslint-bin && npm run lint:eslint-lib && npm run lint:jscs
> [email protected] lint:jshint /home/coderaiser/redrun
> jshint bin lib test
> [email protected] lint:eslint-bin /home/coderaiser/redrun
> eslint --rule 'no-console:0' bin
> [email protected] lint:eslint-lib /home/coderaiser/redrun
> eslint lib test
> [email protected] lint:jscs /home/coderaiser/redrun
> jscs --esnext bin lib test
real 1m10.727s
user 0m14.670s
sys 0m16.663scoderaiser@cloudcmd:~/redrun$ redrun lint:*
> jshint bin lib test && eslint --rule 'no-console:0' bin && eslint lib test && jscs --esnext bin lib test
real 0m38.312s
user 0m8.198s
sys 0m9.113sAs you see redrun much faster and more laconic way of using npm scripts then regular solutions.
- madrun - CLI tool to run multiple npm-scripts in a madly comfortable way.
MIT