Bun

筛选器

使用 --filter 标志一次在多个包中执行生命周期脚本

bun --filter <pattern> <script>

假设你有一个包含两个包的单一仓库:packages/apipackages/frontend,这两个包都带有 dev 脚本,该脚本将启动一个本地开发服务器。通常,你必须打开两个单独的终端选项卡,进入每个包目录,然后运行 bun dev

cd packages/api
bun dev

# in another terminal
cd packages/frontend
bun dev

使用 --filter,你可以同时在两个包中运行 dev 脚本

bun --filter '*' dev 

这两个命令将并行运行,你将看到一个漂亮的终端 UI,显示它们各自的输出

Terminal Output

匹配

--filter 接受一个模式来匹配特定包,按名称或路径。模式完全支持 glob 语法。

包名称 --filter <pattern>

名称模式根据 package.json 中指定的包名称选择包。例如,如果你有包 pkgapkgbother,你可以使用 * 匹配所有包,仅使用 pkg* 匹配 pkgapkgb,并通过提供包的完整名称来匹配特定包。

包路径 --filter ./<glob>

路径模式通过以 ./ 开头来指定,并将选择与模式匹配的目录中的所有包。例如,要匹配 packages 的子目录中的所有包,可以使用 --filter './packages/**'。要匹配位于 pkgs/foo 中的包,请使用 --filter ./pkgs/foo

工作区

过滤器尊重你的 工作区配置:如果你有一个指定哪些包是工作区一部分的 package.json 文件, --filter 将仅限于这些包。此外,在工作区中,你可以使用 --filter 来运行位于工作区中任何位置的包中的脚本

# Packages
# src/foo
# src/bar

# in src/bar: runs myscript in src/foo, no need to cd!
bun run --filter foo myscript

依赖顺序

Bun 在运行脚本时将尊重包依赖顺序。假设你有一个依赖于工作区中另一个包 bar 的包 foo,并且这两个包都有一个 build 脚本。当你运行 bun --filter '*' build 时,你会注意到 foo 只有在 bar 完成后才会开始运行。

循环依赖