@tunnckocore/execa
Thin layer on top of
execa
that allows executing multiple commands in parallel or in sequence with control for concurrency
Please consider following this project's author,
Charlike Mike Reagent, and
If you have any how-to kind of questions, please read the Contributing Guide and Code of Conduct documents. For bugs reports and feature requests, please create an issue or ping @tunnckoCore at Twitter.
Project is semantically versioned & automatically released from GitHub Actions with Lerna.
Table of Contents
(TOC generated by verb using markdown-toc)
Install
This project requires Node.js >=10.13 (see
Support & Release Policy).
Install it using yarn or
npm.
We highly recommend to use Yarn when you
think to contribute to this project.
$ yarn add @tunnckocore/execa
API
Generated using jest-runner-docs.
.exec
Uses execa, { execaCommand }
method. As stated there, think of it as mix
of child_process
's .execFile
and .spawn
. It is pretty similar to the
.shell
method too, but only visually because it does not uses the system's
shell, meaning it does not have access to the system's environment variables.
You also can control concurrency by passing options.concurrency
option. For
example, pass concurrency: 1
to run in series instead of in parallel which is
the default behavior.
Signature
function(cmds, options)
Params
-
cmds
{Array<string>} - a string or array of string commands to execute in parallel or series -
[options]
{object} - directly passed to execa and so tochild_process
-
returns
{Promise} - resolved or rejected promises
It also can accept array of multiple strings of commands that will be executed in series or in parallel (default).
Examples
import { exec } from '@tunnckocore/execa';
// or
// const { exec } = require('@tunnckocore/execa');
async function main() {
await exec('echo "hello world"', { stdio: 'inherit' });
// executes in series (because `concurrency` option is set to `1`)
await exec(
[
'prettier-eslint --write foobar.js',
'eslint --format codeframe foobar.js --fix',
],
{ stdio: 'inherit', preferLocal: true, concurrency: 1 },
);
}
main();
.shell
Similar to exec
, but also can access the system's environment variables
from the command.
Signature
function(cmds, options)
Params
-
cmds
{Array<string>} - a commands to execute in parallel or series -
options
{object} - directly passed toexeca
-
returns
{Promise} - resolved or rejected promises
Examples
import { shell } from '@tunnckocore/execa';
// or
// const { shell } = require('@tunnckocore/execa');
async function main() {
// executes in series
await shell(['echo unicorns', 'echo "foo-$HOME-bar"', 'echo dragons'], {
stdio: 'inherit',
});
// exits with code 3
try {
await shell(['exit 3', 'echo nah']);
} catch (er) {
console.error(er);
// => {
// message: 'Command failed: /bin/sh -c exit 3'
// killed: false,
// code: 3,
// signal: null,
// cmd: '/bin/sh -c exit 3',
// stdout: '',
// stderr: '',
// timedOut: false
// }
}
}
main();
.execa
All execa named exports, see its documentation. Think of this as a mix of
child_process.execFile()
and child_process.spawn()
.
Signature
function(file, args, options)
Params
-
file
{string} - executable to run -
args
{Array<string>} - arguments / flags to be passed tofile
-
options
{object} - optional options, passed tochild_process
's methods
Examples
import { execa, execaCommand, execaNode } from '@tunnckocore/execa';
// or
// const { execa } = require('@tunnckocore/execa');
async function main() {
await execa('npm', ['install', '--save-dev', 'react'], { stdio: 'inherit' });
}
main();
Contributing
Guides and Community
Please read the Contributing Guide and Code of Conduct documents for advices.
For bug reports and feature requests, please join our community forum and open a thread there with prefixing the title of the thread with the name of the project if there's no separate channel for it.
Consider reading the Support and Release Policy guide if you are interested in what are the supported Node.js versions and how we proceed. In short, we support latest two even-numbered Node.js release lines.
Support the project
Become a Partner or Sponsor?
Not financial support? Okey!
Pull requests,
stars and all kind of
contributions
are always welcome.
Contributors
This project follows the all-contributors specification. Contributions of any kind are welcome!
Thanks goes to these wonderful people (emoji key), consider showing your support to them:
Charlike Mike Reagent |
License
Copyright (c) 2017-present, Charlike Mike Reagent
<opensource@tunnckocore.com>
& contributors.
Released under the MPL-2.0 License.