Prock - No Fuss Child Processes
Prock lets you spawn child processes with the ability to listen for standard output, and affords the simplicity of passing a callback like you would with child_process.exec
.
const Prock = require("prock");
Prock.init("git status", {
"cwd": pathToGitRepo
}, (err, stdoutString, stderrString, exitCode, exitSignal) => {
if (err) {
return handleError(err);
}
// ...
}).on("output", (stdoutputString) => {
// Data is either from stdout or stderr of the child process
}).on("out", (stdoutString) => {
// Do something with the output
}).on("err", (stderrString) => {
// Do something with the error output
});
Or use it like any other class:
const Prock = require("prock");
let Process = new Prock(someCommand, someOptions, someCallback);
ChildProcess
objects
Prock instances try to be a drop in replacement for normal They offer all the same event subscriptions, prototype methods, and properties as Node's ChildProcess
objects. The only exception is that an error
event handler isn't required if a callback is passed to the constructor. In that case, the error will be saved, and passed to the callback. Of course, if you want to subscribe to the error
event, you're welcome to.
child_process.exec
Use it like const Prock = require("prock");
Prock.exec("cat someFile.txt", {
"env": {
"ENV_VAR": "ENV_VAL" // Completely uneeded in this case, but whatever
}
}, (err, stdout, stderr, exitCode, exitSignal) => {
// stdout = the contents of someFile.txt
});
child_process.spawn
Use it like const spawn = require("prock").spawn;
const ls = Prock.spawn("ls", [ "-lh", "/usr" ]);
ls.on("out", (data) => {
console.log(`stdout: ${data}`);
}).on("err", (data) => {
console.log(`stderr: ${data}`);
}).on("close", (code) => {
console.log(`child process exited with code ${code}`);
});
Notes / Limitations
Although Prock lets you pass a string as the command unlike child_process.spawn
, it doesn't let you easily redirect IO like you can using child_process.exec
.
const Prock = require("prock");
// This won't work
let Proc = new Prock("echo $SOMETHING > out.txt", (error, out, err) => {
// Pretty much nothing happend, same as trying to do:
// child_proces.spawn("echo", [ "$SOMETHING", '>', "out.txt" ]);
});
Todo
- [ ] Feature requests welcome
- [ ] Handle IO redirection (
>
,>>
, etc.) - Create multipleProck
instances, and pipe stdio around.