What is child-process-ext?
The child-process-ext package is a Node.js module that extends the core 'child_process' module with additional functionality and convenience methods. It simplifies working with child processes in Node.js by providing enhanced features for spawning, executing, and managing child processes.
What are child-process-ext's main functionalities?
Spawn with Promises
This feature allows you to spawn a child process and work with it using promises, making it easier to handle the asynchronous nature of child process execution. The example shows how to list the contents of the '/usr' directory.
const { spawn } = require('child-process-ext');
async function runCommand() {
try {
const result = await spawn('ls', ['-lh', '/usr']);
console.log(`stdout: ${result.stdout}`);
} catch (error) {
console.error(`Error: ${error.message}`);
}
}
runCommand();
Execute with Enhanced Output Handling
This feature simplifies executing a command and directly handling its output. It enhances the default 'exec' by providing a more straightforward way to access stdout and stderr. The example demonstrates checking the Node.js version installed.
const { exec } = require('child-process-ext');
async function executeCommand() {
try {
const { stdout, stderr } = await exec('node -v');
console.log(`Node Version: ${stdout}`);
} catch (error) {
console.error(`Error: ${stderr}`);
}
}
executeCommand();
Other packages similar to child-process-ext
execa
Execa is a popular npm package that provides a better interface for executing child processes. It supports both promise and async/await syntax, similar to child-process-ext, but with additional features like automatic escaping of arguments and more detailed process result information.
cross-spawn
Cross-spawn is another npm package that aims to solve cross-platform issues when using child_process.spawn(). While child-process-ext enhances functionality with promises and better output handling, cross-spawn focuses on ensuring consistent behavior of spawned processes across different operating systems.
child-process-ext
Installation
npm install child-process-ext
API
spawn(command[, args[, options]])
Cross system compliant spawn
(backed by cross-spawn
).
Works exactly same way as node's spawn
with difference that promise is returned that resolves once process exits.
Following properties are exposed on return promise:
child
- child processstdout
- stdout stream (decorated so it can also be used as promise)stderr
- stderr stream (decorated so it can also be used as promise)std
- Merged stdout & stderr stream (decorated so it can also be used as promise)stdoutBuffer
- Buffer that exposes so far written stdout
stderrBuffer
- Buffer that exposes so far written stderrr
stdBuffer
- Buffer that exposes so far written std
Promise resolves with object with three properties:
code
- Exit code of a child processignal
- Signal that terminated the processstdoutBuffer
- Buffer containing gathered stdout
contentstderrBuffer
- Buffer containing gathered stderr
contentstdBuffer
- Buffer containing gathered stderr
content
If process exits with non zero code, then promise is rejected with an error exposing same properties as above
Non standard options
split bool
(default: false
)
Whether stdout data should be split by lines. If set to true
, then stdout
and stderr
on promise expose mappers of original stdout
and stderr
that emit each line with distinct data
event
shouldCloseStdin bool
(default: false
)
Whether stdin should be closed. Applicable for spawned processes where stdin
is set to other than 'inherit'
mode, and underlying processes is reading from stdin
. Not providing any stdin
output, may produce stall if process logic waits for an input.
See: get-stdin#13 for more information
Tests
npm test