ERESOLVE unable to resolve dependency tree
まああんまり同じミスする人いないと思うけどね、でももし誰か同じ罠にハマってたら可愛そうだから、ってか、将来またこのこと忘れて自分が同じ罠にハマりそうな気もするから、メモっとくね。
普通に上のエラーでぐぐると、「–save –legacy-peer-depsを追加してあげましょう」的な回避策を提案してもらえるんだけど、気持ち悪いんだよね、古いバージョンの何かが存在していて依存関係引っ張られてるから、そこ気をつけてインストールしましょう、ってのは。だったらその古いものに依存してしまっているなにかをアップデートしたいぞ、と npm update -g でグローバルなパッケージをアップデートしようとしたり、angularが古い?ng updateとかわけも分からずあーだこーだとやっていたけど、時間のクソ無駄遣いだった。
“nodeのバージョン確認しろ”
Angular ngでもなくて、npmでもなくて、Nodeのバージョンね。
ここがちょっとしたきっかけ(多分同じPC上で行っていた別開発案件)で12から16 に変更されちゃってたんだね。
n を使って切り替えようと思って、まずはお目当ての12.xバージョンをインストール。そのあと切り替えたら、まあちゃんとnpm installが成功しそうになるよね。
で、あと一歩、というところで今度は別の問題が。
Nodeだけじゃなくて、pythonも新しいバージョンに更新しちゃってたみたいなんだよね、3系に。後半のステップ、「node-gyp rebuild」あたり、あと一歩のところで、”version is 3.7.0 – should be >=2.6.0 <3.0.0 THIS VERSION OF PYTHON IS NOT SUPPORTED” とエラーが吐かれる。
pythonのバージョンを切り替えるためには、pyenvというツールを使えばよいのだけれど、pyenv で 2.7.15 をインストールしようとしたらコンバイルが通らない。
「Error: implicit declaration of function ‘ioctl’ is invalid in C99 」って吐いて落ちる。エラーでググると ioctl じゃなくて、sendfileとかその他諸々のモジュールで似たようなエラーが出てる記事がいくつか引っかかる。
この記事に助けてもらったんだけど、下の魔法の3行を実行してから再度pyenv install 2.7.15と叩いたら、ビルドが通って無事希望の2.xがインストールできたよ!
brew install zlib
export LDFLAGS="-L/usr/local/opt/zlib/lib"
export CPPFLAGS="-I/usr/local/opt/zlib/include"