`imagemin-gifsicle` の `Error: spawn node_modules\gifsicle\vendor\gifsicle.exe ENOENT` エラーに対処するために Nodist の Node.js と npm をアップデートする

経緯

imagemin-gifsicle でgifファイルを処理しようとしたら

Error: spawn MYPROJECT\node_modules\gifsicle\vendor\gifsicle.exe ENOENT

というエラーが表示されてしまいました。

ちなみに、

{
    "devDependencies": {
        "imagemin-gifsicle": "^7.0.0"
    }
}

imagemin-gifsicle は 7.0.0。

>node -v
v12.17.0

>npm -v
6.14.4

Node.js は 12.17.0, npm は 6.14.4 、 Nodist (0.9.1)使用環境です。

エラー文で検索すると

該当パッケージの Github の Issue が引っかかりました。

node_modules を一度削除してから入れ直したら?」「Node.js のバージョンが足りないのでは?」といったレスがあったので、試しに Node.js のバージョンを上げてみました。

Node.js のアップデート

>nodist 14.8.0
14.8.0
14.8.0 (global)

>node -v
v14.8.0

>npm -v
Sorry, there's a problem with nodist. Couldn't resolve npm version spec match : Couldn't find any matching version

npm が対応できなくなってしまいました。仕方ないので一度バージョンを戻してから npm をアップデートします。

とはいえ、 Nodist で npm をアップデートしようとしても上手くアップデートできないことがあった(0.9.1 未満のバージョン)のであまり気は進まないのですが。

npm のアップデート

>npm update -g npm
npm ERR! code EEXIST
npm ERR! path PATH\TO\NODIST-DIRECTORY\Nodist\bin\npm.cmd
npm ERR! Refusing to delete PATH\TO\NODIST-DIRECTORY\Nodist\bin\npm.cmd: is outside PATH\TO\NODIST-DIRECTORY\Nodist\bin\node_modules\npm and not a link
npm ERR! File exists: PATH\TO\NODIST-DIRECTORY\Nodist\bin\npm.cmd
npm ERR! Remove the existing file and try again, or run npm
npm ERR! with --force to overwrite files recklessly.

Nodist の npm.cmdnpm を削除せよ、とのこと。エラーの指示通り2つのファイルをリネームします( _npm.cmd のような形で)。

>npm update -g npm
PATH\TO\NODIST-DIRECTORY\Nodist\bin\npx -> PATH\TO\NODIST-DIRECTORY\Nodist\bin\node_modules\npm\bin\npx-cli.js
PATH\TO\NODIST-DIRECTORY\Nodist\bin\npm -> PATH\TO\NODIST-DIRECTORY\Nodist\bin\node_modules\npm\bin\npm-cli.js
+ npm@6.14.8
added 17 packages from 3 contributors, removed 18 packages and updated 22 packages in 25.885s

>npm -v
6.14.4

あれ、上がっていない……。

やり方がまずかったのだろうと思い検索。

以前調べたときのコマンドと異なるコマンドが引っかかったのでこちらを試します。

>nodist npm global 6.14.7
npm 6.14.7
https://codeload.github.com/npm/cli/tar.gz/v6.14.7 [=============  ] 4717/5502 KiB 85% 0.1s

>npm -v
6.14.7

上がりました。それでは、改めて Node.js のバージョンを上げます。

>nodist 14.8.0
14.8.0
14.8.0 (global)

>npm -v
6.14.7

npm がエラーにならずに済みました。これで大丈夫そうです。

imagemin-gifsicle の動作確認

Node.js も npm もバージョンが上がったのでもう一度パッケージをインストールしてやり直してみます。

node_modules と念のため yarn.lock も削除して、インストール実施。

> yarn
yarn install v1.22.4

## 略

OK。

> gulp

[XX:XX:XX] Starting 'imageminify'...
[XX:XX:XX] gulp-imagemin: Minified 3 images (saved 46.6 kB - 67.1%)

OKです。エラーが表示されなくなりました。

参考

この記事を書いた人

アルム=バンド

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。