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を管理する)
から選んで使えるっぽい。
参考にさせていただいた記事。
この記事が気に入ったらサポートをしてみませんか?