[npm] npm install したら `npm ERR! code EINTEGRITY` などと原因不明のエラーが出た時


概要

題名の通り。
なんのエラーか全然わかりませんでした。

実行したコマンド

$ npm install material-dashboard

# 以下、実行結果
npm ERR! code EINTEGRITY
npm ERR! sha512-de6if9WnelNvQdtLRcyTao3vx1ESjOVsX6tiwAmSjJvfBHcHgKO9wP54jYLfYIn3ILbluqXh1GXPqubNLgH/Kg== integrity checksum failed when using sha512: wanted sha512-de6if9WnelNvQdtLRcyTao3vx1ESjOVsX6tiwAmSjJvfBHcHgKO9wP54jYLfYIn3ILbluqXh1GXPqubNLgH/Kg== but got sha512-8Gs0/uEiiQFzPso2htb5dAgIvnGr2Aoba/KxCRTCJdpqmJ1XYDrZMCqJ/C8S0EVX39uvvRbid7GRBCh+Zy7TGQ==. (5701192 bytes)

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/user_name/.npm/_logs/2021-03-20T12_55_13_895Z-debug.log

はい?

対策

以下のような記事が目立ったので、全部やりました。

  • package-lock.jsonを削除しろ
  • $ npm install -g npmしてバージョンを上げろ
  • $ npm cache clean --forceしてキャッシュをクリアしよう

どれが効いたのかは正直わかっていません。
少なくとも、どれか1個ではうまくいきませんでした。

他にもいくつかコマンドを打ったので、詳細は実行したコマンドたちを参照していただけたらと思います。

結果(記録している範囲で)

いろんなコマンドを手あたり次第打ったので、どれが効いていてどれが効いてないのかよくわかりません。

が、後で同じ問題にぶつかったときに役に立ちそうなので、発生したエラーと、効いている可能性があるコマンドを記録しておくことにしました。

エラーたち

1. ???

どのコマンドを打った時かは忘れましたが、次のエラーも出ました

npm ERR! invalid json response body at http://registry.npmjs.org/ansi-escapes reason: Unexpected end of JSON input

npm installコマンドを打った時なのですが、何をinstallしようとしたときだったのかは覚えていません。

少なくとも、次のうちのどちらかでした

  • $ npm install material-dashboard
  • $ npm install -g npm

2. npm install -g npm 時のエラー

$ npm install -g npm

# 以下、実行結果
...(行数が多すぎて消えた。少なくとも数百行は出ていた。)
npm WARN tar TAR_ENTRY_INVALID checksum failure
npm WARN tar TAR_ENTRY_INVALID checksum failure
npm WARN tar TAR_ENTRY_INVALID checksum failure
npm WARN tar TAR_ENTRY_INVALID checksum failure
npm WARN tar TAR_ENTRY_INVALID checksum failure
npm WARN tar TAR_ENTRY_INVALID checksum failure
npm WARN tar TAR_ENTRY_INVALID checksum failure
npm WARN tar TAR_ENTRY_INVALID checksum failure
npm WARN tar TAR_ENTRY_INVALID checksum failure
npm WARN tar TAR_ENTRY_INVALID checksum failure
npm WARN tar TAR_ENTRY_INVALID checksum failure
npm WARN tar zlib: incorrect data check
npm WARN tarball tarball data for npm@https://registry.npmjs.org/npm/-/npm-7.6.3.tgz (sha512-+Cs8TEtkfdQGTIPw8AeqVtNNHyo1Zw8HATzAFFWYnK7jQYgT/CatEy85+BlEoEpqvga2uaKqVrXsTAYj28emjg==) seems to be corrupted. Trying again.
npm ERR! code Z_DATA_ERROR
npm ERR! errno -3
npm ERR! zlib: incorrect data check

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/user_name/.npm/_logs/2021-03-20T12_39_47_633Z-debug.log

3. npm cache clean --force 時のエラー

一時的ではありましたが、npm cache clean --forceすら動かなくなったタイミングもありました

その時には、
sudo chown -R 1000:1000 "/home/user_name/.npm"
してくださいというメッセージが出ていたので、その通りに打ちました。

実行したコマンドたち

同じコマンドを何回も順番ぐちゃぐちゃで打っていますので、正しい順番はわかりません

# .npmディレクトリの権限を書き換えるコマンド
# npmのバグで、権限が勝手に書き換わることがあるらしく、何かのエラーが出た時に「このコマンドを打ってね」、と表示されたので打った
# たしか、`$ npm cache clean --force`できなかったときにこのコマンドを打つように促された気がする
$ sudo chown -R 1000:1000 "/home/user_name/.npm"

# npm本体のアップデート用のコマンド
$ npm update -g npm
$ sudo npm i -g npm to update

# npmのキャッシュ問題があるときの対策のよう
$ npm cache clean --force
$ npm cache verify

# npm系コマンドの実行時エラー結果を見る
$ cat /home/user_name/.npm/_logs/ yyyy-MM-ddTHH:mm:ss.SSSZ-debug.log

# なんのコマンドかはわからないが、github issue内の対策として評価が異様に高かったので、何も考えずに打った
$ npm install --update-binary --no-shrinkwrap

ただ、これらのうちどれか、またはいずれかの組み合わせが効いたらしく、無事$ npm install {module}できるようになりました。

ひとこと

正直、何が原因で、何が効いたのかを調べないといけないとは思ってはいるものの、しばらく触っていなかった環境で起こったことであったため、心当たりは全くなかった。

ということもあり、運任せの対処になってしまっています。
もし、普段よく触っている環境で同じ問題が発生したら、直前の操作などから原因もつかめるかと思うので、そのときはもう少し詳しい因果関係も追記したいと思います。

参考記事

追記 2021/03/21 22:51

また同じエラーが発生した。
今度は、次の2つのコマンドだけで解決できた。

$ npm cache clean --force
$ npm cache verify

何か環境が壊れている可能性がある...

ちなみに、その後ちょうど以下のメッセージが出たので、ついでにnpmも更新しておいた

   ╭───────────────────────────────────────────────────────────────╮
   │                                                               │
   │      New major version of npm available! 6.14.8 → 7.6.3       │
   │   Changelog: https://github.com/npm/cli/releases/tag/v7.6.3   │
   │               Run npm install -g npm to update!               │
   │                                                               │
   ╰───────────────────────────────────────────────────────────────╯
$ sudo npm install -g npm

npmのバージョン(6.14.8)が古すぎたことが原因であった可能性はあるかもしれない( ˘ω˘)スヤァ