Yarnはglobalでの利用を推奨しない
yarnはv2でglobalコマンドを削除した
yarn は global ( system-wide ) への package install をよしとしておらず、v1 では存在していた global コマンドを削除し、どうしても global インストールしたいコマンドなどに利用できる dlx というコマンドを one-off 向けに用意するようになった。
あくまで yarn はプロジェクト単位の管理を目指しているものと言えそう。
yarn globalがないと何が困るのか
Ruby の bundler はもともと global install がデフォルトの動作になっている。これを利用して複数のパッケージを自動的に global インストールすることができる。また global のインストール先も決まっており、そこにインストールされたパッケージをコピーしてくることもできる。
yarn には global で まとめてインストールする機能がそもそもない し、v2 以降は global add もできなくなっている。package.json と yarn.lock のある場所を起点にプロジェクト local に node_modules/ 以下にインストールする挙動になる。
したがってインストール済みのパッケージを再利用するには
- 一度プロジェクトのディレクトリを作る
- そこに local インストール
- プロジェクトのディレクトリ以下の node_modules/ からパッケージを読み取る
という流れにしないといけない。
何の話?と思うかもしれないけど、これは依存 npm 込みの docker image を作る時にハマった話でした。