JamieMason / ImageOptim-CLI

Make optimisation of images part of your automated build process
https://foldleft.io/image-tools
MIT License
3.45k stars 125 forks source link

multiple invocations collide in tmpdir, crash #183

Closed paulp closed 2 years ago

paulp commented 4 years ago

Steps To Reproduce The Error

Invoke imageoptim a second time on the same machine.

Expected Behaviour

Both runs complete successfully.

Actual Behaviour

When the first one completes, it expunges the temporary directory which both processes are using. The other immediately crashes:

i Running ImageOptim...
! ENOENT: no such file or directory, stat '/var/folders/ct/vwmp17px5lq96n7vrqf8fhqh0000gn/T/imageoptim-cli/image123.jpg'
! Please raise an issue at https://github.com/JamieMason/ImageOptim-CLI/issues    

Version Numbers or N/A

N/A

Help Needed

Invocations should each use a unique temporary directory. I'm unfamiliar with this language, but on the command line you can see what mktemp does:

% /usr/bin/mktemp -d
/var/folders/ct/vwmp17px5lq96n7vrqf8fhqh0000gn/T/tmp.oe1HyPEd

The string oe1HyPEd in this example is there to prevent bugs of this kind.

Fixing this probably only requires a tweak to this line but at the moment I don't have time to familiarize myself enough to send a PR. If needed I will come back to this. Thanks.

danmostudco commented 4 years ago

Just to comment on this, I've had a similar problem when adding multiple images. I've been using it in a pre-commit hook using husky > lint-staged > and then calling image-optim. Anytime I have multiple jpg's the process seems to fail.

However, the the cli seems to work with multiple pngs. Here are the scripts I call

"imageoptim": "yarn imageoptim:gif && yarn imageoptim:jpg && yarn imageoptim:png", "imageoptim:gif": "imageoptim \"public/**/*.gif\"", "imageoptim:jpg": "imageoptim \"public/**/*.jpg\"", "imageoptim:png": "imageoptim --no-imageoptim --imagealpha \"public/**/*.png\"",

Sometimes I don't get the error, and instead it appears I get stuck in a loop or sorts until I kill the process. Unsure if this helps but figured I would chime in. Thanks!

JamieMason commented 2 years ago

This should hopefully be fixed in 3.0.7