Skip to main content
--filter(或 -F)标志可按模式选择 monorepo 中的包。模式可以匹配包名称或包路径,并支持完整的 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 会为 monorepo 中的每个包安装依赖。要为特定包安装依赖,请使用 --filter 假设一个 monorepo,工作区有 ./packages 下的 pkg-apkg-bpkg-c
terminal
同样,bun outdated 会显示 monorepo 中所有包的过期依赖,而 --filter 会将命令限制为其中的部分包:
terminal
请参阅 bun installbun outdated

使用 --filter 运行脚本

使用 --filter 标志可以一次在多个包中执行脚本:
terminal
假设你有一个包含两个包的 monorepo:packages/apipackages/frontend,它们都有一个用于启动本地开发服务器的 dev 脚本。通常,你需要打开两个终端标签页,分别切换到每个包的目录,然后运行 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 时,只有在 bar 完成后,foo 才会开始运行。