Awesome
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
package.json
:
{
"scripts": {
"one": "npm run two",
"two": "npm run three",
"three": "echo 'hello'"
}
}
Usually these expressions would be executed one after another:
coderaiser@cloudcmd:~/redrun$ npm run one
> redrun@1.0.0 one /home/coderaiser/redrun
> npm run two
> redrun@1.0.0 two /home/coderaiser/redrun
> npm run three
> redrun@1.0.0 three /home/coderaiser/redrun
> echo 'hello'
hello
All these npm run
commands that are created are slow, because each time it creates a new process.
redrun
makes it faster:
coderaiser@cloudcmd:~/redrun$ redrun one
> echo 'hello'
hello
How to use?
Redrun could be used via the command line, the scripts section of package.json
or in a script:
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:*
> redrun@5.3.0 lint:jshint /home/coderaiser/redrun
> jshint bin lib test
> redrun@5.3.0 lint:eslint-bin /home/coderaiser/redrun
> eslint --rule 'no-console:0' bin
> redrun@5.3.0 lint:eslint-lib /home/coderaiser/redrun
> eslint lib test
> redrun@5.3.0 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
redrun@5.3.0 speed:npm-run /home/coderaiser/redrun
> npm run lint:jshint && npm run lint:eslint-bin && npm run lint:eslint-lib && npm run lint:jscs
> redrun@5.3.0 lint:jshint /home/coderaiser/redrun
> jshint bin lib test
> redrun@5.3.0 lint:eslint-bin /home/coderaiser/redrun
> eslint --rule 'no-console:0' bin
> redrun@5.3.0 lint:eslint-lib /home/coderaiser/redrun
> eslint lib test
> redrun@5.3.0 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 can see redrun
is much faster and more DRY way of using npm scripts
than regular solutions.
Related
- madrun - CLI tool to run multiple npm-scripts in a madly comfortable way.
License
MIT