Multi Vitamin & Mineral

Multi Vitamin & Mineral です。プログラムに関することを書いております。

【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 というエラーが出力されます。

cb.apply エラー
cb.apply エラー

...前略...
16 error cb.apply is not a function
...後略...

調べてみると、解決されたパターンはいくつかあるようでした。環境にもよるでしょうから当然でしょう。以降、複数人の方がコレで解消したと言っている方法と、私が解消した方法をまとめて記載します。

対処方法

上から順に、影響が少なく簡単かと思います。一つずつ試してみて、解消すれば終了ラッキーという感じで進めるとよいんじゃないかと思います。

  1. npm cache clean --force でキャッシュを削除
  2. /AppData/Roamingnpmnpm_cache を削除
  3. Node.js の再インストール
  4. /graceful-fs/polyfills.js の特定の箇所のコメントアウトする。
  5. nodist の利用をやめる(nodist を使っていた場合)

1 2 3 は、下記のサイトの情報を参考にしました。

github.com

4 は、下記のサイトの情報を参考にしました。

flaviocopes.com

5 は、 nodist を使っている場合の対応です。

キャッシュの削除

以下のコマンドを実行します。

$ npm cache clean --force

コレで解決しなければ次へ。

/AppData/Roaming 配下の削除

キャッシュ等々が直接残っているフォルダを削除します。

  • /C/Users/(ユーザ名)/AppData/Roaming/npm_cache
  • /C/Users/(ユーザ名)/AppData/Roaming/npm

「別のプログラムがこのフォルダーまたはファイルを開いているので、操作を完了できません」と出で削除が出来ない場合は「リソースモニター」で握っているアプリを見つけると吉です。下記のサイトが参考になりました。

qiita.com

私の場合、 VSCode が握っていたのでこれを閉じたら上手くいきました。

コレで解決しなければ次へ。

Node.js の再インストール

スタートメニュー(Windows左下のやつ) > 設定(歯車アイコン) > アプリ > Node から「アンインストール」します。それから再度インストールします。

コレで解決しなければ次へ。

/graceful-fs/polyfills.js のコメントアウト

/graceful-fs/polyfills.js の特定の箇所のコメントアウトする方法です。

下記のサイトが参考になります。

flaviocopes.com

かなりアグレッシブな方法になると思います。 error cb.apply is not a function が発生したまさにその箇所を直接修正しちゃえってことですね。

管理が大変なのであまりオススメではないですが、これで助かる人もいらっしゃるでしょう。

コレで解決しなければ次へ。

nodist の利用をやめる

nodist の利用をやめます。代わりに公式サイトで提供されている Windows 版を直接インストールする等、他の方法を利用します。私はこれで解消しました。

nodist のアンインストールは各種フォルダやファイルが完全削除されないので注意です。 Windows で「nodist」を検索し、残っているものを削除するのが良いかも知れません。

nodist のアンインストールとその後のインストールについては下記の記事にまとめました。

multimineral-tech.com

別の事象ではありますが、下記のように nodist に悩まされている人は結構いらっしゃるようです。もう nodist を使う時代は終わったのでしょう。。。そんな更新もされてないですし。。。

qiita.com

あとがき

ということで、私自信がヒットしていない方法もありますが(スミマセン)、ヒットした方法+周辺情報ということでまとめました。私があちこち行ったり来たりするのが大変だったのでまとまった記事が一つくらいあってもよかろう、というのが作った理由。どれかが当たれば幸いです。