フィルタリング
フィルタリングを使用すると、コマンドをパッケージの特定のサブセットに制限できます。
pnpm は、名前または関係によってパッケージを選択するための豊富なセレクター構文をサポートしています。
セレクターは、--filter
(または -F
) フラグを介して指定できます
pnpm --filter <package_selector> <command>
一致
--filter <package_name>
特定のパッケージを選択するには、その名前 (@scope/pkg
) を指定するか、パターンを使用してパッケージのセット (@scope/*
) を選択します。
例
pnpm --filter "@babel/core" test
pnpm --filter "@babel/*" test
pnpm --filter "*core" test
パッケージのスコープの指定はオプションです。そのため、core
が見つからない場合、--filter=core
は @babel/core
を選択します。ただし、ワークスペースに同じ名前のパッケージが複数ある場合 (たとえば、@babel/core
と @types/core
)、スコープなしでフィルタリングすると何も選択されません。
--filter <package_name>...
パッケージとその依存関係 (直接および間接) を選択するには、パッケージ名の末尾に省略記号を付けます: <package_name>...
。たとえば、次のコマンドは foo
とそのすべての依存関係のテストを実行します
pnpm --filter foo... test
ルートパッケージのセットを選択するためにパターンを使用できます
pnpm --filter "@babel/preset-*..." test
--filter <package_name>^...
パッケージの依存関係 (直接および間接) **のみ** を選択するには、名前に山かっこが先行する前述の省略記号を付けます。たとえば、次のコマンドは foo
のすべての依存関係のテストを実行します
pnpm --filter "foo^..." test
--filter ...<package_name>
パッケージとその依存パッケージ (直接および間接) を選択するには、パッケージ名の前に省略記号を付けます: ...<package_name>
。たとえば、これは foo
とそれに依存するすべてのパッケージのテストを実行します
pnpm --filter ...foo test
--filter "...^<package_name>"
パッケージの依存パッケージ (直接および間接) **のみ** を選択するには、パッケージ名の前に山かっこが続く省略記号を付けます。たとえば、これは foo
に依存するすべてのパッケージのテストを実行します
pnpm --filter "...^foo" test
--filter ./<glob>
, --filter {<glob>}
プロジェクトと一致する、現在の作業ディレクトリを基準とした glob パターン。
pnpm --filter "./packages/**" <cmd>
指定されたディレクトリの下にあるすべてのプロジェクトが含まれます。
省略記号と山かっこ演算子と一緒に使用して、依存関係/依存パッケージを選択することもできます
pnpm --filter ...{<directory>} <cmd>
pnpm --filter {<directory>}... <cmd>
pnpm --filter ...{<directory>}... <cmd>
[<since>]
と組み合わせることもできます。たとえば、ディレクトリ内の変更されたすべてのプロジェクトを選択するには
pnpm --filter "{packages/**}[origin/master]" <cmd>
pnpm --filter "...{packages/**}[origin/master]" <cmd>
pnpm --filter "{packages/**}[origin/master]..." <cmd>
pnpm --filter "...{packages/**}[origin/master]..." <cmd>
または、指定されたパターンに一致する名前を持つディレクトリからすべてのパッケージを選択できます
pnpm --filter "@babel/*{components/**}" <cmd>
pnpm --filter "@babel/*{components/**}[origin/master]" <cmd>
pnpm --filter "...@babel/*{components/**}[origin/master]" <cmd>
--filter "[<since>]"
指定されたコミット/ブランチ以降に変更されたすべてのパッケージを選択します。依存関係/依存パッケージを含めるには、末尾または先頭に ...
を付けることができます。
たとえば、次のコマンドは、master
以降に変更されたすべてのパッケージと、依存するパッケージでテストを実行します
pnpm --filter "...[origin/master]" test
--fail-if-no-match
フィルターに一致するパッケージがない場合に CLI を失敗させたい場合は、このフラグを使用します。
除外
フィルターセレクターの先頭に "!" が付いている場合、除外演算子として機能します。zsh (および場合によっては他のシェル) では、"!" はエスケープする必要があります: \!
。
たとえば、これは foo
を除くすべてのプロジェクトでコマンドを実行します
pnpm --filter=!foo <cmd>
そして、これは lib
ディレクトリ下にないすべてのプロジェクトでコマンドを実行します
pnpm --filter=!./lib <cmd>
多重度
パッケージがフィルタリングされると、少なくとも1つのセレクターに一致するすべてのパッケージが取得されます。必要な数のフィルターを使用できます
pnpm --filter ...foo --filter bar --filter baz... test
--filter-prod <filtering_pattern>
--filter
と同じように動作しますが、ワークスペースから依存プロジェクトを選択するときに devDependencies
を省略します。
--test-pattern <glob>
test-pattern
を使用すると、変更されたファイルがテストに関連しているかどうかを検出できます。関連している場合、変更されたパッケージの依存パッケージは含まれません。
このオプションは、「変更以降」フィルターで役立ちます。たとえば、次のコマンドは変更されたすべてのパッケージでテストを実行し、変更がパッケージのソースコードにある場合、依存パッケージでもテストを実行します
pnpm --filter="...[origin/master]" --test-pattern="test/*" test
--changed-files-ignore-pattern <glob>
指定されたコミット/ブランチ以降に変更されたプロジェクトをフィルタリングするときに、glob パターンによって変更されたファイルを無視できます。
使用例
pnpm --filter="...[origin/master]" --changed-files-ignore-pattern="**/README.md" run build