redrun
redrun copied to clipboard
✨🐌 🐎✨ fastest npm scripts runner
Redrun

CLI tool to run multiple npm-scripts fast. Supports madly comfortable 🏎 Madrun.

Install
npm i redrun -g
Usage
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
Completion
You can enable tab-completion of npm scripts similar to npm's completion using:
redrun-completion >> ~/.bashrc
redrun-completion >> ~/.zshrc
You 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.
How it works
{
"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'
hello
Usually 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
How to use?
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'`;
Speed comparison
The less spend time is better:
npm-run-all: 1m12.570snpm run && npm run: 1m10.727sredrun: 0m38.312s
Here are logs:
npm-run-all:
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.147s
npm run && npm run
coderaiserser@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.663s
redrun
coderaiser@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.113s
As you see redrun much faster and more laconic way of using npm scripts then regular solutions.
Related
- madrun - CLI tool to run multiple npm-scripts in a madly comfortable way.
License
MIT