npm install が EINTEGRITY エラーでインストールできない
EINTEGRITY は取得した tarball のハッシュが package-lock.json の integrity と一致しないときのエラー。
キャッシュ破損よりも lockfile 側の古いハッシュやプロキシによる改変が原因のことが多い。
#npm#eintegrity#checksum#package-lock#cache
公開:
要約
npm error code EINTEGRITY は、ダウンロードした tarball の sha512 検証結果が package-lock.json の integrity と一致しなかったことを意味する。
npm のキャッシュは公式ドキュメントのとおり出し入れの両方で整合性検証されるため、キャッシュ破損が原因のことは実は少ない。
「lockfile の古いハッシュ → プロキシ・レジストリ → キャッシュ」の順に疑うのが効率的。
よくある原因
- lockfile の integrity が古い: マージ解決のミスやレジストリ移行(公式 ↔ ミラー)の名残で、現在のレジストリが返す tarball と異なるハッシュが残っている。
- プロキシ・ミラーの改変: 経路上で再圧縮などにより本家と異なる tarball が返り、ハッシュが合わない。
- 不完全なダウンロード: 回線切断で途中まで落ちたファイルを検証して失敗する。
- キャッシュ破損: まれに発生するが、npm は自己修復的に再取得するため頻度は低い。
解決策
1. キャッシュを検査する
npm cache verifyキャッシュインデックスと全データの整合性を検証し、不要データを掃除する。
これで直ればキャッシュ起因と確定できる。
2. lockfile の integrity を取り直す
rm package-lock.json
npm install
git diff package-lock.jsonエラーの wanted sha512-... but got sha512-... に出たパッケージのハッシュが更新される。
差分をレビューして commit する。
3. レジストリ設定を切り分ける
npm config get registry
npm install --registry=https://registry.npmjs.org/ミラーやプロキシ経由で EINTEGRITY が出て、公式レジストリ直結では出ない場合、原因は経路側にある。.npmrc の registry / proxy 設定を見直す。
4. 最終手段としてキャッシュを全削除する
npm cache clean --force
npm install公式ドキュメントは「キャッシュは自己修復的であり全削除は通常不要」としているため、1〜3 で直らないときの最終手段に留める。