Skip to main content
--filter(或 -F)标志通过模式选择单体仓库中的包。模式匹配包名或包路径,支持完整的 glob 语法。 bun installbun outdated 支持 --filter,你也可以使用它同时在多个包中运行脚本。

匹配

包名 --filter <pattern>

名称模式通过 package.json 中的 name 字段选择包。例如,如果你有包 pkg-apkg-bother,可以使用 * 匹配所有包,使用 pkg* 仅匹配 pkg-apkg-b,使用完整名称匹配特定包。

包路径 --filter ./<glob>

路径模式以 ./ 开头,选择所有位于匹配模式的目录中的包。例如,要匹配 packages 子目录中的所有包,请使用 --filter './packages/**'。要匹配 packages/foo 中的包,请使用 --filter ./packages/foo

bun installbun outdated

默认情况下,bun install 为单体仓库中的每个包安装依赖。要为特定包安装依赖,请使用 --filter 假设一个单体仓库在 ./packages 下有工作空间 pkg-apkg-bpkg-c
terminal
类似地,bun outdated 显示单体仓库中所有包的过期依赖,而 --filter 将命令限制为其中一部分:
terminal
请参阅 bun installbun outdated

使用 --filter 运行脚本

使用 --filter 标志同时在多个包中执行脚本:
terminal
假设你有一个包含两个包的单体仓库:packages/apipackages/frontend,两者都有一个启动本地开发服务器的 dev 脚本。通常,你需要打开两个终端标签页,分别 cd 到每个包目录并运行 bun dev
terminal
使用 --filter,你可以同时在两个包中运行 dev 脚本:
terminal
两个脚本并行运行,终端 UI 显示各自的输出:
终端输出

在工作空间中运行脚本

过滤器尊重你的工作空间配置:如果你的 package.json 指定了哪些包属于工作空间,--filter 仅匹配这些包。在工作空间中,--filter 还可以运行位于工作空间任何位置的包中的脚本:
terminal

并行和串行模式

--filter--workspaces--parallel--sequential 结合使用,可以在工作空间包中以 Foreman 风格的前缀输出运行脚本:
terminal
每行输出都带有包名和脚本名前缀(pkg-a:build | ...)。没有 --filter/--workspaces 时,前缀仅为脚本名(build | ...)。当包的 package.json 没有 name 字段时,Bun 使用相对于工作空间根的路径。 使用 --if-present--workspaces 可以跳过没有请求脚本的包,而不是报错。

依赖顺序

Bun 在运行脚本时会考虑包的依赖顺序。假设你有一个包 foo 依赖于工作空间中的另一个包 bar,两者都有 build 脚本。当你运行 bun --filter '*' build 时,foo 只在 bar 完成后才开始。