turborepo + pnpmを使う際に欠かせないpnpmのfilterオプション。
addやtestやlintなど結構必要な場合が多いと思います。
特に、GitHub ActionsなどのCI環境でテストやLintを実行する場合、依存関係に含まれるすべてのパッケージをチェックしたいことがあります。
もちろん、複数のパッケージを単純に指定することも可能です。
例えば、appsディレクトリにdocsとwebがあり、packagesディレクトリにuiがあると仮定します。
|
|
webアプリとそれに依存するuiのテストをする場合は以下ようにフィルタすることでweb, uiの両方をテストすることが可能です。
|
|
ただし、依存するパッケージが増えた場合、フィルタの指定を追加しなければなりません。
依存関係を含めてフィルタする
package.jsonには依存関係が明記されているため、フィルタを複数指定することは適切ではありません。
特にCIテストを実行する場合、依存関係が増えるたびにフィルタを変更する必要があり、運用が困難になります。
pnpmでは、依存関係を含めてフィルタすることができます。
パッケージ名の末尾に三点リーダーを追加すると、依存するすべてのパッケージをフィルタできます。
|
|
これにより、webとその依存であるuiパッケージをテストできます。
依存されているパッケージを指定する
pnpmでは、依存しているパッケージではなく、依存されているパッケージを指定することもできます。
例えば、uiパッケージのCIテストを作成する際に、依存されている側のパッケージもテストしたい場合、パッケージ名の前に三点リーダーをつけることで実現できます。
|
|
他にも様々なフィルタ指定方法があります
pnpmのフィルタ機能は非常に柔軟で、さまざまな指定方法があります。
詳細は公式ドキュメントをご確認いただくことをおすすめします。