yarn v4からはバンドルされたJavaScriptプログラムであるreleasesやpluginsをGitにコミットする必要が無くなります
まだv4の正式リリースはされてないですし、 stable向けに完全に確定したわけでは無いですが。最近のコミットではrcとしてv4のタグが付いているため、次はv4になってこうなるでしょう。
berry/CHANGELOG.md at master · yarnpkg/berry を見る限り、メジャーバージョンの更新はレガシーAPIの廃止などがあるためでしょうね。
いい加減yarn berry移行を進めていこうとしています
yarn v1はいくらなんでももう古いです。
また懸念点の一つであった、 GitHubのDependabotがyarn berryに対応したため移行しない理由が一つ減りました。 Dependabot can now generate security and version updates for Yarn v2 and v3 | GitHub Changelog
なので移行を進めていこうとしていますが、複数人関わる仕事でやらかしたら嫌なので、まずは自分のdotfilesとか個人的なもので使っています。
バンドルされたJavaScriptファイルをコミットしたくない
yarn berryのZero-Installは論外として、 yarn本体のバンドルされた本体もコミットしたくありません。
バンドルされた巨大なプログラムをGitにコミットなんてしたくないに決まっています。 OpenAPIのYAMLとか差分が重要で見やすいものならともかくとして。
なので.gitignore
のyarn部分は以下のようになります。
.yarn/*
# !.yarn/releases
!.yarn/patches
# !.yarn/plugins
!.yarn/sdks
!.yarn/versions
この状態で他の人は一撃でプロジェクトで使っているバージョンのyarnをセットアップ出来るのか検証してみました。みんなcorepackは使っているということを前提にしています。
core
現在(yarn v3)は、
yarn set version stable
のように実行すると、
.yarnrc.yml
では、
yarnPath: .yarn/releases/yarn-3.4.1.cjs
のように書き込まれて、
package.json
では、
"packageManager": "yarn@3.4.1",
のように更新されます。
ここで.yarn
ディレクトリをgit clean
などで吹き飛ばして、
yarn
を実行すると、以下のようなエラーになります。
Internal Error: The "yarn-path" option has been set (in /home/ncaq/dotfiles/git-hooks/.yarnrc.yml), but the specified location doesn't exist (/home/ncaq/dotfiles/git-hooks/.yarn/releases/yarn-3.4.1.cjs).
at i (/home/ncaq/.cache/node/corepack/yarn/3.4.1/yarn.js:446:11180)
at async t (/home/ncaq/.cache/node/corepack/yarn/3.4.1/yarn.js:446:10283)
しかし心配は不要です。
.yarnrc.yml
のyarnPath
の書き込みを削除すると、
corepackの指示に従ってyarn
でインストールが成功します。
次のリリースではcorepackを検出するとyarnPath
の書き込みはなくなるようです。多重管理は無駄なので廃止する方針のようですね。
The yarn set version command will now skip generating the yarnPath configuration on new projects if it detects you're using Corepack
でもこれ初期設定時に触れてるだけなのでset version
だとどうなるかはまだよく分からないですね。リリースされてないので検証も面倒。
yarnの本体更新時ぐらいの話なら手動で消しても良いですが。
plugins
yarn upgrade-interactive
などはberryからはpluginになりました。
yarn plugin import interactive-tools
のようにimportする必要があります。
しかしv4からは公式のpluginに関してはcoreにバンドルされるので、一々yarn plugin import foo
する必要が無くなります。ほとんどはこれで解決ですね。
さらに、
feat: when initializing the Configuration
, auto fetch the missing plugins by jj811208 · Pull Request #4912 · yarnpkg/berry
を見る限り、
pluginのファイルが消滅している場合、自動でインストールしてくれるようになるようです。
実際にyarn set version from sources
して最新版を試してみましょう。
適当にコアに含まれないサードパーティの無害そうなやつで試してみます。 yarn.build にしましょうか。
これを、
yarn plugin import https://yarn.build/latest
してから.yarn
を吹き飛ばしてyarn
すると…
エラーになりますね。よく考えてみると.yarn
ごと吹き飛ばしたらせっかくソースから最新版をインストールしていても、安定版に戻ってしまうので見てもらえないのは当然ですね。
.yarn/plugins
だけを消してみましょう。見事yarn
で.yarn/plugins
ディレクトリにpluginがインストールされました。これでv4ではpluginの本体をコミットしなくても、他のメンバーは容易くyarn
コマンドだけでインストール出来るということになりますね。
これでyarn v4からはバンドルされたJavaScriptをコミットしたくないけれど、他のメンバーとも環境を統一したいという欲求を自然に満たせるようになります。
yarn v3でも頑張れば可能なのかもしれませんが、 yarn v4からは自然に出来るようになって嬉しいですね。