This package exposes a SyncChildProcess
class that allows Node.js to run a
subprocess synchronously and interactively.
Use new SyncChildProcess()
to start running a subprocess. This supports the
same API as child_process.spawn()
other than a few options. You can send
input to the process using process.stdin
, and receive events from it
(stdout, stderr, or exit) using process.next()
. This implements the
iterator protocol, but not the iterable protocol because it's intrinsically
stateful.
import {SyncChildProcess} from 'sync-child-process';
// or
// const {SyncChildProcess} = require('sync-child-process');
const node = new SyncChildProcess('node', ['--interactive']);
for (;;) {
if (node.next().value.data.toString().endsWith('> ')) break;
}
node.stdin.write("41 * Math.pow(2, 5)\n");
console.log((node.next().value.data.toString().split("\n")[0]));
node.stdin.write(".exit\n");
console.log(`Node exited with exit code ${node.next().value.code}`);
See the sync-message-port
documentation for an explanation of why running
code synchronously can be valuable even in an asynchronous ecosystem like
Node.js
Although Node's built-in child_process.spawnSync()
function does run
synchronously, it's not interactive. It only returns once the process has run to
completion and exited, which means it's not suitable for any long-lived
subprocess that interleaves sending and receiving data, such as when using the
embedded Sass protocol.
Disclaimer: this is not an official Google product.