月 の 上

npm-shrinkwrap.jsonが壊れた時、対処にめっちゃ時間がかかる

いつの間にかnpm-shrinkwrap.jsonが壊れてて、真っ更な状態から環境構築しようとするとエラーが出るようになった。

実際に出るエラーは

npm ERR! install trying to install 0.9.11 to /Users/amagitakayosi/XXX/node_modules/babel-runtime/node_modules/core-js
npm ERR! install but already installed versions [ '1.2.1' ]

といった感じ。

このエラーは、複数のパッケージのpeerDependencyでcore-jsが指定されていて、かつバージョンがバラバラの時に起きる。
明示的に npm i -D core-js とすると直る。
あるいは、 npm i -g core-js としても直るらしい

ただ、今回はこのエラーが複数出てて、かつ npm i -D などで明示的にdepsに記録しても直らない。
さらに、 一度 npm-shrinkwrap.json を削除し、package.json の情報でインストールした後に npm-shrinkwrap.json を再生成する、というのを試したが、直らない。
何かのパッケージの依存情報が壊れてしまっているのだろうか?

手当たり次第に解決策を試してみて、uber/npm-shrinkwrap を使ったり、 npmのバージョンを上げたりしてみたのだけど、一つ試す毎に

  • rm npm-shrinkwrap.json
  • rm -rf node_modules
  • npm i
  • npm shrinkwrap --dev
  • rm -rf node_modules
  • npm i

という手順を踏まないと正常かどうか確認できないので、めっちゃ時間がかかる。
明らかにおかしいエラーが出た時は npm cache clean もするので更に面倒。
さらに、wifiの調子が悪いと、関係ないパッケージで Error: socket hang up が出てやり直しとなる。

結局、今回のエラーは

ことで解決することがわかったのだけど、他の作業と並行してやって合計6時間くらいかかった。
みなさんどうしてるんですか……

※この記事は npm i の待機中に執筆されました