@momsfriendlydevco/exec
v1.5.9
Published
Wrapper around child_process.spawn() / exec() to execute external commands
Downloads
24
Readme
@momsfriendlydevco/exec
Tiny wrapper around child_process.spawn()
/ exec()
which provides some additional functionality.
Differences from spawn / exec:
- Always returns a promise for running processes. That promise can return output if
buffer
is enabled - Can easily prefix output to STDOUT / STDERR or both
- Can accept a single array of command arguments rather than treating the program + args separately
- Can accept a single string command which is correctly transformed internally
- Optionally can buffer and provide all output when resolving / rejecting
- Supports piping
- Auto-trimming out output
- Hashbangs supported
- Can natively accept JSON and fail if not given valid input
- Support for aliases within commands (and pipes)
var exec = require('@momsfriendlydevco/exec');
exec('echo "Hello world"')
.then(()=> /* ... */)
exec(['docker', 'build', '--tag=momsfriendlydevco/test', '.'], {
prefix: '[docker]',
})
.then(()=> /* ... */)
Debugging
This module uses the Debug NPM package and responds to exec
.
To see verbose debugging output simply set DEBUG=exec
or any valid glob expression.
> DEBUG=exec node someNodeFile.js
API
This module exposes a function (which returns a promise) as well as a few utility functions. The function takes an array (or string) of arguments where the executable is the first item within that array. An additional options object can be passed.
exec([cmd], <cmd+args|args>, [options])
Supported options:
| Option | Type | Default | Description |
| ------------------ | ------------------------- | ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| buffer
| boolean
| undefined
| Set both bufferStdout
+ bufferStderr
at once |
| bufferStdout
| boolean
| false
| When resolving the promise provide the output from the command as the value of the resolved promise |
| bufferStderr
| boolean
| false
| As with bufferStdout
but also include STDERR stream data |
| log
| boolean
or function
| undefined
| Set both logStdout
+ logStderr
at once |
| logStdout
| boolean
or function
| console.log
| Logging function to use when outputting STDOUT, set to falsy to disable |
| logStderr
| boolean
or function
| console.log
| Similar to logStdout
but with the STDERR stream |
| prefix
| string
or function
| undefined
| Sets both prefixStdout
+ prefixStderr
at once |
| prefixStdout
| string
or function
| undefined
| Sets a string prefix for any STDOUT output, if a function it is called as (msg)
and uses the return value, effectively acting as a wrapper |
| prefixStderr
| string
or function
| undefined
| Similar functionality to prefixStdout
but with STDERR streams |
| rejectError
| string
, boolean
or function
| 'Non-zero exit code'
| If a string use this to signal errors, boolean false
returns the error code in the catch()
block, if a function that function is called as (code)
to return the string to return |
| reformat
| boolean
| undefined
| Set both reformatStdout
+ reformatStderr
at once |
| reformatStdout
| boolean
| false
| When accepting data from Stdout and prefixStdout
is enabled, also split newline input so each newline is prefixed |
| reformatStderr
| boolean
| false
| As with reformatStdout
but also reformat STDERR stream data |
| resolveCodes
| array
| [0]
| Array of numeric error codes to accept as a valid response |
| json
| boolean
| false
| Attempt to convert the contents of the output buffer (contents dictated by buffer*
into JSON before returning), implies bufferStdout
|
| jsonInvalidTruncate
| number
| 30
| When parsing invalid JSON truncate the error output to this many bytes (i.e. not UTF-8 friendly) |
| jsonInvalidTruncateSuffix
| string
| "…"
| Suffix to append when truncating invalid JSON input |
| pipe
| boolean
or string
| 'auto'
| Use the shell to execute, if 'auto'
pipes are detected automatically |
| shell
| string
| '/bin/sh'
| A STDIN processing shell, used when pipe
is true or auto detected |
| hashbang
| boolean
| true
| If specified the file is opened and hashbangReadLength
bytes examined for a hashbang, if one is found the command is prefixed with it |
| hashbangReadLength
| number
| 100
| How many bytes to explore at the start of files for the hashbang |
| trim
| boolean
| true
| Automatically trim output to remove trailing newlines and spaces |
| trimRegExp
| RegExp
| /[\n\s]+$/m
| The regular expression used when trimming |
| env
| object
| {}
| Environment variables to pass to the shell |
| cwd
| string
| undeinfed
| The current working directory to execute the process within |
| uid
| number
| undefined
| The UID who owns the process |
| gid
| number
| undefined
| The GID who owns the process |
| alias
| object
| {}
| Object list of command aliases |
| stdin
| stream.Readable
, "inherit"
, buffer
or string
| undefined
| Either connect the stream to the proess STDIN or feed the given input into STDIN if its a string or buffer |
NOTES:
- Setting
log
orlog{Stdout,Stderr}
automatically implies the respectivelogStdout
/logStderr
function to be true - Setting
stdin="inherit"
is the equivelent of settingstdin=process.stdin
to connect the outer process STDIN pipe to the innner process
exec.defaults
An object containing the default options for exec()
which can be globally changed.
exec.split(cmd)
Take a command line and split it into a child_process.spawn()
compatible array.
exec.join(args)
Take a disected child_process.spawn()
comaptible array and convert it into a single line, runnable shell command.