Calling the ImageOptim macOS app from a Node.js script

By

Learn how to launch the ImageOptim macOS app from a Node.js script using the child_process module and the open -a command to optimize a folder of images.

~~~

sharp is what I usually use to optimize images in my Node.js scripts.

But sometimes I like using the ImageOptim macOS application to optimize images with a GUI.

This time I had the need to start it from a Node.js script.

Here’s what I did.

Import execFile from the built-in node:child_process module:

import { execFile } from 'node:child_process'

then I called it in this way to optimize all images in a specific folder:

const imagesFolder = './img'

execFile('open', ['-a', 'ImageOptim', imagesFolder], (error) => {
  if (error) {
    console.error('Could not open ImageOptim', error)
  }
})

execFile() passes the folder as an argument instead of interpolating it into a shell command. This handles spaces in the path and avoids treating path characters as shell syntax.

This starts the app and hands it the folder. It does not wait for ImageOptim to finish processing the files, and it only works on macOS with ImageOptim installed.

Tagged: Node.js · All topics
~~~

Related posts about node: