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 を作る時にハマった話でした。

More