Skip to content

--filter(または -F)フラグは、モノレポでパターンでパッケージを選択するために使用されます。パターンはパッケージ名またはパッケージパスの一致に使用でき、完全な glob 構文をサポートしています。

現在、--filterbun installbun outdated でサポートされており、複数のパッケージでスクリプトを一度に実行するためにも使用できます。


一致

パッケージ名 --filter <pattern>

名前のパターンは、package.json で指定されているパッケージ名に基づいてパッケージを選択します。例えば、pkg-apkg-bother というパッケージがある場合、* ですべてのパッケージを一致させ、pkg*pkg-apkg-b のみを一致させ、パッケージの完全な名前を指定して特定のパッケージを一致させることができます。

パッケージパス --filter ./<glob>

パスのパターンは、パターンを ./ で始めることで指定し、パターンに一致するディレクトリ内のすべてのパッケージを選択します。例えば、packages のサブディレクトリ内のすべてのパッケージを一致させるには、--filter './packages/**' を使用します。packages/foo にあるパッケージを一致させるには、--filter ./packages/foo を使用します。


bun installbun outdated

bun installbun outdated の両方が --filter フラグをサポートしています。

bun install はデフォルトで、モノレポ内のすべてのパッケージの依存関係をインストールします。特定のパッケージの依存関係のみをインストールするには、--filter を使用します。

./packages 配下にワークスペース pkg-apkg-bpkg-c を持つモノレポがある場合。

bash
# `pkg-c` 以外のすべてのワークスペースの依存関係をインストール
bun install --filter '!pkg-c'

# `./packages` 内のパッケージの依存関係をインストール(`pkg-a`、`pkg-b`、`pkg-c`)
bun install --filter './packages/*'

# 上記と同じだが、ルート package.json を除外
bun install --filter '!./' --filter './packages/*'

同様に、bun outdated はモノレポ内のすべてのパッケージの古い依存関係を表示し、--filter を使用してコマンドをパッケージのサブセットに制限できます。

bash
# `pkg-` で始まるワークスペースの古い依存関係を表示
bun outdated --filter 'pkg-*'

# ルート package.json のみを表示
bun outdated --filter './'

これらのコマンドの詳細については、bun installbun outdated を参照してください。


--filter でスクリプトを実行する

--filter フラグを使用して、複数のパッケージでスクリプトを一度に実行します。

bash
bun --filter <pattern> <script>

packages/apipackages/frontend という 2 つのパッケージを持つモノレポがあり、両方にローカル開発サーバーを起動する dev スクリプトがあるとします。通常、2 つの別のターミナルタブを開き、各パッケージディレクトリに cd で移動し、bun dev を実行する必要があります。

bash
cd packages/api
bun dev

# 別のターミナルで
cd packages/frontend
bun dev

--filter を使用すると、両方のパッケージで dev スクリプトを一度に実行できます。

bash
bun --filter '*' dev

両方のコマンドが並列で実行され、それぞれの出力を示す美しいターミナル UI が表示されます。

ワークスペースでスクリプトを実行する

フィルターは ワークスペース設定 を尊重します。ワークスペースの一部であるパッケージを指定する package.json ファイルがある場合、--filter はこれらのパッケージのみに制限されます。また、ワークスペース内では、--filter を使用して、ワークスペース内のどこにあるパッケージでもスクリプトを実行できます。

bash
# パッケージ
# src/foo
# src/bar

# src/bar で: src/foo で myscript を実行、cd は不要!
bun run --filter foo myscript

依存関係の順序

Bun はスクリプトを実行する際に依存関係の順序を尊重します。ワークスペース内にパッケージ foo が別のパッケージ bar に依存しており、両方のパッケージに build スクリプトがあるとします。bun --filter '*' build を実行すると、foobar が完了するまで実行されないことに気づきます。

Bun by www.bunjs.com.cn 編集