フィルタリング
フィルタリングを使用すると、コマンドをの特定の一部のパッケージに制限できます。
pnpm はパッケージを名前またはリレーションで選択するための豊富なセレクタ構文をサポートしています。
セレクターは --filter
(または -F
) フラグで指定できます:
pnpm --filter <package_selector> <command>
Matching
--filter <package_name>
完全に一致するパッケージを選択するには、その名前 (@scope/pkg
) を指定してください。 もしくは、パターンを使用してパッケージすべてを選択できます (@scope/*
) 。
例:
pnpm --filter "@babel/core" test
pnpm --filter "@babel/*" test
pnpm --filter "*core" test
パッケージのスコープを指定するのは任意なので、 --filter=core
で 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
自身を除いたすべての foo
依存関係についてテストを実行します。
pnpm --filter "foo^..." test
--filter ...<package_name>
パッケージとその (直接および間接の) 依存を選択するには、パッケージ名の前に三点リーダーを付与します。 ...<package_name>
。 例えば次のコマンドは、 foo
とそれに依存するすべてのパッケージのテストを実行します。
pnpm --filter ...foo test
--filter "...^<package_name>"
パッケージの (直接および間接の) 依存のみを選択するには、パッケージ名の前に三点リーダーとそれに続くキャレットを付けます。 例えば次のコマンドは、 foo
自身を除いたすべての foo
に依存するパッケージのテストを実行します。
pnpm --filter "...^foo" test
--filter ./<glob>
, --filter {<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
Use this flag if you want the CLI to fail if no packages have matched the filters.
除外
いずれのフィルタセレクタも、先頭に "!" がある場合は除外演算子として機能します。 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
を使用すると、変更されたファイルがテストに関連しているかどうかを検出することができます。 もしそうであれば、そのような変更されたパッケージの依存パッケージは含まれません。
このオプションは、"changed since" フィルタと一緒に使うと便利です。 例えば次のコマンドは、変更されたすべてのパッケージでテストを実行します。パッケージのソースコードに変更があった場合は、テストは依存パッケージでも実行されます。
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