pnpm の Catalogs を使って monorepo 内のバージョンを統一する

🖊

monorepo を運用していると、パッケージごとに参照しているライブラリのバージョンが異なっていて、結果として動作不良やビルドエラーにつながるケースがあります。こういった状態を回避する方法として pnpm v 10 で導入された Catalogs 機能が使えます。

最近 dependabot も対応しました。

Catalogs では、monorepo の定義ファイルである pnpm-workspace.yaml に利用したいバージョンを記載しておくことで、各パッケージからは catalog: でそれを参照することができます。例えば React のバージョンを 19.0.0 に統一したい場合は次のようにします。

pnpm-workspace.yaml:

catalog:
    react: 19.0.0

packages/foo/package.json:

{
  "dependencies": {
    "react": "catalog:"
  }
}

packages/bar/package.json:

{
  "dependencies": {
    "react": "catalog:"
  }
}

こうすると packages/foo でも packages/bar でも、同じ React 19.0.0 が利用できるようになります。

yaakai.to