はじめに
久しぶりにcreate-react-appを叩いたら、失敗しました。
調べたことを簡単にメモメモ。
※認識間違っている所があれば、ご指摘お願いします。
現象
下記コマンド実行時にエラーが発生。
コマンド:
npx create-react-app {プロジェクト名} --template typescript
エラー:
ERR! cb() never called!
環境は以下の通り。
・OS :Docker上のUbuntu:20.04
・nvm :0.38.0
・node:14.17.4
・npm :6.14.14
原因
まとめてくださっている記事によると、どうやらnpmのキャッシュの不具合らしい。(キャッシュが壊れている?)
この現象はcreate-react-app
に限ったものではなく、npm install
でも発生するそうです。
npmのキャッシュとは?
npmのDocによると、
npm install
によってインストールしたパッケージのhttpリクエストデータや、パッケージに関連するデータを格納している。らしい。
※英語の読解が甘いかもしれません。。。
また、
The npm cache is strictly a cache: it should not be relied upon as a persistent and reliable data store for package data. npm makes no guarantee that a previously-cached piece of data will be available later, and will automatically delete corrupted contents.
とありました。
内容としては、下記のようなことが書いてあります。
・npmのキャッシュは永続的で、信頼性の高いデータストアとして扱うべきではない。
・npmは以前にキャッシュしたデータに関して、後で利用可能なことは保証しない。
・破損したコンテンツを自動的に削除する。
最後の「自動的に削除する」というのはやって貰えていない気がしますが、ひとまず以前のキャッシュが正しくない場合は対応が必要になりそうです。
解決方法
キャッシュが壊れている場合は下記コマンド実行後、再度create-react-appを叩けばok。
npm cache verify
もし上記コマンドでうまくいかない場合は下記コマンドでキャッシュをクリアする方法でもうまくいくらしいです。
※こちらはverifyでうまくいったため、試してはいません。
npm cache clean --force
※手動でキャッシュをクリアする際は、--force
で強制的に削除する必要があるようです。
参考
・npm-cache
・Node.js と npm 再入門(その4:便利コマンド)
・npm install実行時、 ERR! cb() never called!エラー対処
以上ですー。