Featured image of post pnpmで依存関係があるパッケージすべてをフィルタする

pnpmで依存関係があるパッケージすべてをフィルタする

Twitter ツイート Hatena Bookmark ブックマーク

turborepo + pnpmを使う際に欠かせないpnpmのfilterオプション。
addやtestやlintなど結構必要な場合が多いと思います。

特に、GitHub ActionsなどのCI環境でテストやLintを実行する場合、依存関係に含まれるすべてのパッケージをチェックしたいことがあります。
もちろん、複数のパッケージを単純に指定することも可能です。

例えば、appsディレクトリにdocsとwebがあり、packagesディレクトリにuiがあると仮定します。

1
2
3
4
5
6
.
├── apps
│   ├── docs
│   └── web
└── packages
    └── ui

webアプリとそれに依存するuiのテストをする場合は以下ようにフィルタすることでweb, uiの両方をテストすることが可能です。

1
$ pnpm test --filter web --filter ui

ただし、依存するパッケージが増えた場合、フィルタの指定を追加しなければなりません。

依存関係を含めてフィルタする

package.jsonには依存関係が明記されているため、フィルタを複数指定することは適切ではありません。
特にCIテストを実行する場合、依存関係が増えるたびにフィルタを変更する必要があり、運用が困難になります。

pnpmでは、依存関係を含めてフィルタすることができます。
パッケージ名の末尾に三点リーダーを追加すると、依存するすべてのパッケージをフィルタできます。

1
$ pnpm test --filter=web...

これにより、webとその依存であるuiパッケージをテストできます。

依存されているパッケージを指定する

pnpmでは、依存しているパッケージではなく、依存されているパッケージを指定することもできます。
例えば、uiパッケージのCIテストを作成する際に、依存されている側のパッケージもテストしたい場合、パッケージ名の前に三点リーダーをつけることで実現できます。

1
$ pnpm test --filter=...ui

他にも様々なフィルタ指定方法があります

pnpmのフィルタ機能は非常に柔軟で、さまざまな指定方法があります。
詳細は公式ドキュメントをご確認いただくことをおすすめします。

Filtering

comments powered by Disqus
Built with Hugo
テーマ StackJimmy によって設計されています。