できない.dev

npm install が EINTEGRITY エラーでインストールできない

EINTEGRITY は取得した tarball のハッシュが package-lock.json の integrity と一致しないときのエラー。
キャッシュ破損よりも lockfile 側の古いハッシュやプロキシによる改変が原因のことが多い。

#npm#eintegrity#checksum#package-lock#cache

公開:

要約

npm error code EINTEGRITY は、ダウンロードした tarball の sha512 検証結果が package-lock.jsonintegrity と一致しなかったことを意味する。
npm のキャッシュは公式ドキュメントのとおり出し入れの両方で整合性検証されるため、キャッシュ破損が原因のことは実は少ない。
「lockfile の古いハッシュ → プロキシ・レジストリ → キャッシュ」の順に疑うのが効率的。

よくある原因

  1. lockfile の integrity が古い: マージ解決のミスやレジストリ移行(公式 ↔ ミラー)の名残で、現在のレジストリが返す tarball と異なるハッシュが残っている。
  2. プロキシ・ミラーの改変: 経路上で再圧縮などにより本家と異なる tarball が返り、ハッシュが合わない。
  3. 不完全なダウンロード: 回線切断で途中まで落ちたファイルを検証して失敗する。
  4. キャッシュ破損: まれに発生するが、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 が出て、公式レジストリ直結では出ない場合、原因は経路側にある。.npmrcregistry / proxy 設定を見直す。

4. 最終手段としてキャッシュを全削除する

npm cache clean --force
npm install

公式ドキュメントは「キャッシュは自己修復的であり全削除は通常不要」としているため、1〜3 で直らないときの最終手段に留める。

この記事は役立ちましたか?