【TIPS】Windows の「npm」で「error cb.apply is not a function」を解消した話(nodist の利用は諦めた!)
error cb.apply is not a function
というエラーに悩まされていたのでその共有です。 Windows 10 で Node.js をインストールしている前提のお話になりますのでご了承ください。
調べた中で出てきいくつかの解消方法をかき集めてまとめたので、どれかにヒットすれば幸いです。
事象
npm
コマンドや npx
コマンドを実行したときに以下のようなエラーが出力されました。
# ...前略... npm ERR! C:\Users\(ユーザ名)\AppData\Roaming\npm-cache\_logs\yyyy-MM-ddTHH:mm:ss.SSSZ-debug.log Package install failed, see above.
ログに出力された C:\Users\(ユーザ名)\AppData\Roaming\npm-cache\_logs\yyyy-MM-ddTHH:mm:ss.SSSZ-debug.log
の中は以下の通りです。 error cb.apply is not a function
というエラーが出力されます。
...前略... 16 error cb.apply is not a function ...後略...
調べてみると、解決されたパターンはいくつかあるようでした。環境にもよるでしょうから当然でしょう。以降、複数人の方がコレで解消したと言っている方法と、私が解消した方法をまとめて記載します。
対処方法
上から順に、影響が少なく簡単かと思います。一つずつ試してみて、解消すれば終了ラッキーという感じで進めるとよいんじゃないかと思います。
npm cache clean --force
でキャッシュを削除/AppData/Roaming
のnpm
とnpm_cache
を削除- Node.js の再インストール
/graceful-fs/polyfills.js
の特定の箇所のコメントアウトする。- nodist の利用をやめる(nodist を使っていた場合)
1 2 3 は、下記のサイトの情報を参考にしました。
4 は、下記のサイトの情報を参考にしました。
5 は、 nodist を使っている場合の対応です。
キャッシュの削除
以下のコマンドを実行します。
$ npm cache clean --force
コレで解決しなければ次へ。
/AppData/Roaming 配下の削除
キャッシュ等々が直接残っているフォルダを削除します。
/C/Users/(ユーザ名)/AppData/Roaming/npm_cache
/C/Users/(ユーザ名)/AppData/Roaming/npm
「別のプログラムがこのフォルダーまたはファイルを開いているので、操作を完了できません」と出で削除が出来ない場合は「リソースモニター」で握っているアプリを見つけると吉です。下記のサイトが参考になりました。
私の場合、 VSCode が握っていたのでこれを閉じたら上手くいきました。
コレで解決しなければ次へ。
Node.js の再インストール
スタートメニュー(Windows左下のやつ) > 設定(歯車アイコン) > アプリ > Node から「アンインストール」します。それから再度インストールします。
コレで解決しなければ次へ。
/graceful-fs/polyfills.js のコメントアウト
/graceful-fs/polyfills.js
の特定の箇所のコメントアウトする方法です。
下記のサイトが参考になります。
かなりアグレッシブな方法になると思います。 error cb.apply is not a function
が発生したまさにその箇所を直接修正しちゃえってことですね。
管理が大変なのであまりオススメではないですが、これで助かる人もいらっしゃるでしょう。
コレで解決しなければ次へ。
nodist の利用をやめる
nodist の利用をやめます。代わりに公式サイトで提供されている Windows 版を直接インストールする等、他の方法を利用します。私はこれで解消しました。
nodist のアンインストールは各種フォルダやファイルが完全削除されないので注意です。 Windows で「nodist」を検索し、残っているものを削除するのが良いかも知れません。
nodist のアンインストールとその後のインストールについては下記の記事にまとめました。
別の事象ではありますが、下記のように nodist に悩まされている人は結構いらっしゃるようです。もう nodist を使う時代は終わったのでしょう。。。そんな更新もされてないですし。。。
あとがき
ということで、私自信がヒットしていない方法もありますが(スミマセン)、ヒットした方法+周辺情報ということでまとめました。私があちこち行ったり来たりするのが大変だったのでまとまった記事が一つくらいあってもよかろう、というのが作った理由。どれかが当たれば幸いです。