Process. It is common for a Node.js application to need to run an external process, like to encode images. With the child_process module, we can spawn subprocesses.
By calling the on() method on stdout, we can access a Buffer that has the output of the process. This is what would have been printed in the terminal window.
Example. We require the node child_process module to access useful methods like spawn(). To run this example, be sure to install cwebp (a program for generating WEBP images).
Step 1 We specify the input and output file names that we pass as arguments to cwebp. These are relative to the home directory.
Step 2 We call the spawn method. The first argument is the command we want to run, and the second is an array of arguments.
Step 4 We use stderr.on() in the same was as stdout.on, but it receives the data written to the error log.
Step 5 When the close event occurs, we print the exit code of the process. The lambda receives an integer code.
const c = require("node:child_process");
// Step 1: specify the input and output file names to cwebp.
const inputImage = "test/arrow.png";
const outputImage = "test/arrow.webp";
// Step 2: spawn the process and specify command-line arguments as an array.
const cwebp = c.spawn("cwebp", ["-q", "30", inputImage, "-o", outputImage]);
// Step 3: if stdout has data, print it as a string.
cwebp.stdout.on("data", (data) => {
console.log(data.toString());
});
// Step 4: if stderr has data, print it as a string.
cwebp.stderr.on("data", (data) => {
console.error(data.toString());
});
// Step 5: when child process is closed, exit and print the exit code.
cwebp.on("close", (code) => {
console.log("Exited with code:", code);
});Saving file 'test/arrow.webp'
File: test/arrow.png
Dimension: 245 x 127
Output: 818 bytes Y-U-V-All-PSNR 38.09 37.89 37.14 37.88 dB
(0.21 bpp)
block count: intra4: 28 (21.88%)
intra16: 100 (78.12%)
skipped: 41 (32.03%)
bytes used: header: 39 (4.8%)
mode-partition: 180 (22.0%)
Residuals bytes |segment 1|segment 2|segment 3|segment 4| total
macroblocks: | 4%| 14%| 29%| 53%| 128
quantizer: | 68 | 66 | 59 | 42 |
filter level: | 24 | 18 | 26 | 6 |
Exited with code: 0
Process versus child process. In Node, there is a process module as well as a child_process module. Process refers to the current process, and child_process is a subprocess.
Summary. With the spawn method, we can run subprocesses in Node.js. This is essential for certain tasks like encoding images with a separate program.
Dot Net Perls is a collection of tested code examples. Pages are continually updated to stay current, with code correctness a top priority.
Sam Allen is passionate about computer languages. In the past, his work has been recommended by Apple and Microsoft and he has studied computers at a selective university in the United States.