Skip to content

Das --filter-Flag (oder -F) wird verwendet, um Pakete nach Muster in einem Monorepo auszuwählen. Muster können verwendet werden, um Paketnamen oder Paketpfade abzugleichen, mit vollständiger Unterstützung für Glob-Syntax.

Derzeit wird --filter von bun install und bun outdated unterstützt und kann auch verwendet werden, um Skripte für mehrere Pakete gleichzeitig auszuführen.


Abgleich ​

Paketname --filter <muster> ​

Namensmuster wählen Pakete basierend auf dem Paketnamen aus, wie in package.json angegeben. Wenn Sie beispielsweise die Pakete pkg-a, pkg-b und other haben, können Sie alle Pakete mit * abgleichen, nur pkg-a und pkg-b mit pkg*, und ein bestimmtes Paket durch Angabe des vollständigen Paketnamens.

Paketpfad --filter ./<glob> ​

Pfadmuster werden durch Starten des Musters mit ./ angegeben und wählen alle Pakete in Verzeichnissen aus, die dem Muster entsprechen. Um beispielsweise alle Pakete in Unterverzeichnissen von packages abzugleichen, können Sie --filter './packages/**' verwenden. Um ein Paket in packages/foo abzugleichen, verwenden Sie --filter ./packages/foo.


bun install und bun outdated ​

Sowohl bun install als auch bun outdated unterstützen das --filter-Flag.

bun install installiert standardmäßig Abhängigkeiten für alle Pakete im Monorepo. Um Abhängigkeiten für bestimmte Pakete zu installieren, verwenden Sie --filter.

Angenommen, Sie haben ein Monorepo mit Workspaces pkg-a, pkg-b und pkg-c unter ./packages:

bash
# Installiert Abhängigkeiten für alle Workspaces außer `pkg-c`
bun install --filter '!pkg-c'

# Installiert Abhängigkeiten für Pakete in `./packages` (`pkg-a`, `pkg-b`, `pkg-c`)
bun install --filter './packages/*'

# Wie oben, aber schließt das root package.json aus
bun install --filter '!./' --filter './packages/*'

Ebenso zeigt bun outdated veraltete Abhängigkeiten für alle Pakete im Monorepo an, und --filter kann verwendet werden, um den Befehl auf eine Teilmenge der Pakete zu beschränken:

bash
# Zeigt veraltete Abhängigkeiten für Workspaces an, die mit `pkg-` beginnen
bun outdated --filter 'pkg-*'

# Zeigt veraltete Abhängigkeiten nur für das root package.json an
bun outdated --filter './'

Weitere Informationen zu beiden Befehlen finden Sie unter bun install und bun outdated.


Skripte mit --filter ausführen ​

Verwenden Sie das --filter-Flag, um Skripte in mehreren Paketen gleichzeitig auszuführen:

bash
bun --filter <muster> <skript>

Angenommen, Sie haben ein Monorepo mit zwei Paketen: packages/api und packages/frontend, beide mit einem dev-Skript, das einen lokalen Entwicklungsserver startet. Normalerweise müssten Sie zwei separate Terminal-Tabs öffnen, in jedes Paketverzeichnis cd ausführen und bun dev ausführen:

bash
cd packages/api
bun dev

# in einem anderen Terminal
cd packages/frontend
bun dev

Mit --filter können Sie das dev-Skript in beiden Paketen gleichzeitig ausführen:

bash
bun --filter '*' dev

Beide Befehle werden parallel ausgeführt, und Sie sehen eine schöne Terminal-Benutzeroberfläche, die ihre jeweiligen Ausgaben anzeigt:

Skripte in Workspaces ausführen ​

Filter respektieren Ihre Workspace-Konfiguration: Wenn Sie eine package.json-Datei haben, die angibt, welche Pakete Teil des Workspace sind, wird --filter nur auf diese Pakete beschränkt. Außerdem können Sie in einem Workspace --filter verwenden, um Skripte in Paketen auszuführen, die sich überall im Workspace befinden:

bash
# Pakete
# src/foo
# src/bar

# in src/bar: führt myscript in src/foo aus, kein cd erforderlich!
bun run --filter foo myscript

Abhängigkeitsreihenfolge ​

Bun respektiert die Abhängigkeitsreihenfolge beim Ausführen von Skripten. Angenommen, Sie haben ein Paket foo, das von einem anderen Paket bar in Ihrem Workspace abhängt, und beide Pakete haben ein build-Skript. Wenn Sie bun --filter '*' build ausführen, werden Sie feststellen, dass foo erst mit der Ausführung beginnt, wenn bar fertig ist.

Bun von www.bunjs.com.cn bearbeitet