ワークスペース
pnpm には、モノリポジトリ(別名、マルチプロジェクトリポジトリ、またはモノリシックリポジトリ)のサポートが組み込まれています。 ワークスペースを作成して、単一のリポジトリ内で複数のプロジェクトを統合できます。
ワークスペースを作成するには、ルートに pnpm-workspace.yaml を作成します。 また、ワークスペースではルートに .npmrc を置くこともできます。
モノレポの管理を検討している場合は、Bit も検討することをお勧めします。 Bit は内部で pnpm を使用しますが、pnpm/npm/Yarn によって管理される従来のワークスペースで現在手動で行われている多くのことを自動化します。 bit install に関するこちらの記事に、それについて書かれています:Bit による苦痛なきモノレポジトリ依存関係管理 (英語)
ワークスペースプロトコル (workspace:)
デフォルトでは、使用可能なパッケージが宣言された範囲と一致する場合、 pnpm はワークスペースからパッケージをリンクします。 例えば、bar が "foo": "^1.0.0" を依存関係に定義していて、foo@1.0.0 がワークスペースにある場合、foo@1.0.0はbarにリンクされます。 ただし、 bar が依存として "foo": "2.0.0" を定義しても、foo@2.0.0 がワークスペース側になければ、foo@2.0.0 はレジストリからインストールされます。 この動作はいくつかの不確実性をもたらします。
幸い、pnpmは workspace: プロトコルをサポートしています。 このプロトコルが使用されている場合、 pnpm は ローカルにあるワークスペースパッケージ以外のものに解決されることを禁止します。 そのため、 "foo": "workspace:2.0.0"を設定すると、今回は "foo@2.0.0" がワークスペースに存在しないため、インストールに失敗します。
このプロトコルは、link-workspace-packages オプションが false に設定されている場合に特に便利です。 この場合、 workspace: プロトコルが使用されている場合にのみ、pnpm はワークスペースからパッケージをリンクします。
エイリアスを介したワークスペースパッケージの参照
たとえば、 foo という名前のパッケージがワークスペースにあるとします。 通常、 "foo": "workspace:*" として参照します。
別のエイリアスを使用する場合は、次の構文も使用できます: "bar": "workspace:foo@*".
公開する前に、エイリアスは通常のエイリアスされた依存関係に変換されます。 上記の例は "bar": "npm:foo@1.0.0" になります。