Node.js
npm
YARN

yarnを入れたら大変だった話

皆さん、Node.js使ってますか。
Node.jsのパッケージマネージャーとしてnpmを使っている方もいると思いますが、今回はyarnの話です。

yarnって?

雑に言うとnpm互換で速いパッケージマネージャー。映画じゃないよ
キャッシュとか使ってオフラインでもinstall出来たりする、結構優れもの。

最初は、JavaのOkhttpみたいに、ラッパーと言うか、npmの上に載って裏であれこれしてくれるのかな、と思ってたんですが、どうやら違うらしい。

ンまぁそこはどうでも良いとして、yarnはBSDライセンスのフリーソフトですが、Facebook、Google、Exponent、Tildeが開発したらしいとも聞きます。
トップページにはこんな謳い文句が。

高速で、信頼性が高く、そして安全な依存関係の管理

速度とともに信頼性を謳っています。
そしてネットで記事を漁っても、それほどネガティブな記事は見当たらない。
更には、何か忘れてしまったのですが、何かのプロジェクトをnpmでやろうとするとdeprecatedって言われるらしく。。。

これは入れるしかない!と思い、ビクビクしながら入れてみたところ…

どこやねん。

yarnの入れ方

昔はnpmでも入れられたみたいですが、今はdeprecatedだしバージョンも古いかもなので、OSネイティブなパッケージマネージャーで入れましょう。Windowsはインストーラーもあり〼。
私はmacなのでbrew install yarn
一応yarn --versionで入ったかどうか確認を。

さてここからが問題。

"npm互換"?

npm互換を謳われていますが(どこで)、互換なのはpackage.jsonだけで、node_modulesの階層が違ったりします。なので置き換えるより入れ替える方が良いでしょう。

だが私が文句を言いたいのはここではない。

yarnを入れた後…

npm uninstall -g hoge
yarn global install hoge

こうすれば元あったnode_modulesに置いてくれると思ってました。
でも、無いんです。さぁどうする。Spotlightを使っても出てこない。どこだ…

しかも、入れたpackageのコマンドが反応しない!つまりPATHも通ってない。貴重な手がかりが…

と言うわけで大変なことになりました。

結論

いました。/Users/***/.config/yarn/global/node_modulesに。
.config。隠しフォルダ。そりゃSpotlightしてくれないわけだ。
中に.binってフォルダがあって、その中にシンボリックリンクが置いてあるので、ここにPATHを通してあげましょう。

export PATH=$PATH:/Users/***/.config/yarn/global/node_modules/.bin

一応echoで表示して追加されてるか確認しておきましょう。もしかしたら置き換わっちゃってるかもなので。

echo $PATH

これにてとりあえず解決。めでたしめでたし。