ワークスペース
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"
になります。
相対パスでワークスペースのパッケージを参 照する
ワークスペースに 2 つのパッケージがあるとします:
+ packages
+ foo
+ bar
bar
は foo
を依存として "foo": "workspace:../foo"
と宣言することができます。 公開する前に、これらのバージョン指定はすべてのパッケージマネージャーがサポートしている通常のバージョン指定に変換されます。