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:
# 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:
# 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:
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:
cd packages/api
bun dev
# in einem anderen Terminal
cd packages/frontend
bun devMit --filter können Sie das dev-Skript in beiden Paketen gleichzeitig ausführen:
bun --filter '*' devBeide 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:
# Pakete
# src/foo
# src/bar
# in src/bar: führt myscript in src/foo aus, kein cd erforderlich!
bun run --filter foo myscriptAbhä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.