いつの間にか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
が出てやり直しとなる。
結局、今回のエラーは
- uber/npm-shrinkwrap を使う
- npm3系を使う
ことで解決することがわかったのだけど、他の作業と並行してやって合計6時間くらいかかった。
みなさんどうしてるんですか……
※この記事は npm i
の待機中に執筆されました