Yarn v2の新機能についての話。

リリースされてから大分経つので&最近ようやく使い始めたのでまとめる。

チョットシラベタ状態なのでふわふわしてる部分あり。間違ってたらツッコミください。

PnPを使用したパッケージ管理

PnPとはPlug'n'Playの略。

node_modulesのようにパッケージや依存関係全体をインストールせずに、.pnp.cjsという単一のファイルにパッケージやバージョン、依存関係のマップを生成。.yarn/cacheにzipファイルでパッケージ管理し、モジュールを読み込む。(物理的な管理から仮想的な管理になるイメージ?)

installが高速化される他、.pnp.cjsによる依存関係ツリーの最適化などがメリットとして挙げられている。

Zero-Installs

.pnp.cjs並びに .yarn/cacheをgit管理することで、従来のように yarn installしなくてもパッケージが使用可能。

パッケージをgit管理はまずいんじゃないかと思ったが、node_modules 135kの非圧縮ファイル(合計1.2GB)のフォルダと .yarn/cache 2kのバイナリアーカイブ(合計139MB)で Gitは前者をサポートできないが、後者はまったく問題なしというのが公式の見解らしい。

pnpify


Plug'n'Playはrequire APIを使用するプロジェクトと互換性がある。そのため一部のパッケージは互換性がない。
pnpifyはPnPに準拠していない↑のようなプロジェクトがnode_modulesディレクトリにアクセスしようとすると、その呼び出しをインターセプトし、PnPAPIへの呼び出しに変換する。

vscodeのTypescriptやプロジェクト内の設定で使用するESlint等はnode_modulesから定義ファイルを探すため上記に当てはまる。
その場合IDEに対しても設定を適応してやる必要がある。

※ ちなみに、前提としてyarn v2においてPnPは必須ではない

- node_modules使用の従来のパッケージ管理
- PnPでのパッケージ管理
- PnPでのパッケージ管理かつZero-Installs(.gitignoreで .pnp.cjs, .yarn/cacheを管理する)

から選んで使えるっぽい。

参考にさせていただいた記事。


この記事が気に入ったらサポートをしてみませんか?