ndenvでNode.jsのバージョンを管理している環境で、
Node.jsのバージョン切り替えをした際に、yarnが実行できないエラーが発生するので、
対処方法をメモしたいと思います。
エラー内容
Node.jsのバージョンを変えた時などに、yarnコマンドを実行しようとすると、
以下のメッセージが表示されて、yarnを実行できない場合があります。
ndenv: yarn: command not found The `yarn' command exists in these Node versions: X.X.X
直訳:yarn コマンドが存在しません。yarnコマンドは、以下のバージョンのNodeに存在します。
対処方法1
エラー内容で案内されたNode.jsに切り替えて、yarnを利用する。
Node.jsのバージョンにこだわりが無い場合、
素直に、使用するNode.jsのバージョンを変更してyarnを実行します。
ndenvであれば、以下などでバージョンを指定します。
・全体的にNode.jsのバージョンを指定
ndevn global バージョン番号
・カレントプロジェクトのみにNode.jsのバージョンを指定
ndenv local バージョン番号
しかし、Node.jsのバージョンを複数管理している場合、
明確な意図が有ってバージョンを指定しており、
目的のバージョンでないと困る事が多いと思います。
その場合、こちらの対応方法は選択できません。
対処方法2
以下のコマンドで、利用しているNode.jsのバージョンをndenvに認識させます。
基本的には、こちらで解消されると思います。
ndenv rehash
しかし、こちらを利用しても問題が解消されない場合は、
以下のコマンドなどで、ndenvが認識しているyarnのデータを消すと解消されます。
rm -rf /Users/ユーザーディレクトリ/.ndenv/shims/yarn
ちなみに、yarnを実行した際に、.ndenv/shims/yarnに新しい認識情報が保存され、
再度、異なるバージョンのNode.jsに変更した際に、同じ問題が発生します。
どうしてもNode.jsのバージョンを変更しても、同じ現象を発生させたくない場合、
npm経由でインストールしたyarnを利用するのではなく、
別のツール(Homebrewなど)でインストールして管理するyarnを利用する必要があります。
※利用するyarn以外は、ローカルに存在しない状態を保つ必要があります。
今回のメモは以上となります。
Node.jsを管理するツールには、Ndenv以外にも、NodeBrewやnvmが存在します。
試していませんが、対策されていなければ、
他のツールでも同様の現象が発生するかもしれません。
また、ndenvは現在非推奨となっており、
新しいnodenvを利用する事が推奨されています。
https://github.com/riywo/ndenv
何を使えば良いか迷うところですが、
なるべく開発が継続されているツールを利用したいところです。