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.570s -
npm run && npm run
: 1m10.727s -
redrun
: 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