--filter(或 -F)標志用於在 monorepo 中按模式選擇包。模式可用於匹配包名稱或包路徑,支持完整的 glob 語法。
目前 --filter 支持 bun install 和 bun outdated,也可用於一次性運行多個包的腳本。
匹配
包名稱 --filter <pattern>
名稱模式根據 package.json 中指定的包名稱選擇包。例如,如果你有包 pkg-a、pkg-b 和 other,你可以使用 * 匹配所有包,使用 pkg* 僅匹配 pkg-a 和 pkg-b,或者通過提供包的完整名稱來匹配特定包。
包路徑 --filter ./<glob>
路徑模式通過以 ./ 開頭指定,將選擇所有匹配目錄中的包。例如,要匹配 packages 子目錄中的所有包,可以使用 --filter './packages/**'。要匹配位於 packages/foo 中的包,使用 --filter ./packages/foo。
bun install 和 bun outdated
bun install 和 bun outdated 都支持 --filter 標志。
bun install 默認會安裝 monorepo 中所有包的依賴。要安裝特定包的依賴,請使用 --filter。
給定一個 monorepo,在 ./packages 下有工作區 pkg-a、pkg-b 和 pkg-c:
# 為除 `pkg-c` 外的所有工作區安裝依賴
bun install --filter '!pkg-c'
# 為 `./packages` 中的包安裝依賴(`pkg-a`、`pkg-b`、`pkg-c`)
bun install --filter './packages/*'
# 與上面相同,但排除根 package.json
bun install --filter '!./' --filter './packages/*'同樣,bun outdated 將顯示 monorepo 中所有包的過時依賴,--filter 可用於將命令限制為包的子集:
# 顯示以 `pkg-` 開頭的工作區的過時依賴
bun outdated --filter 'pkg-*'
# 僅顯示根 package.json 的過時依賴
bun outdated --filter './'有關這兩個命令的更多信息,請參閱 bun install 和 bun outdated。
使用 --filter 運行腳本
使用 --filter 標志一次性在多個包中執行腳本:
bun --filter <pattern> <script>假設你有一個 monorepo,其中有兩個包:packages/api 和 packages/frontend,它們都有一個 dev 腳本用於啟動本地開發服務器。通常,你必須打開兩個單獨的終端標簽頁,cd 進入每個包目錄,然後運行 bun dev:
cd packages/api
bun dev
# 在另一個終端中
cd packages/frontend
bun dev使用 --filter,你可以一次性在兩個包中運行 dev 腳本:
bun --filter '*' dev兩個命令將並行運行,你將看到一個漂亮的終端 UI 顯示它們各自的輸出:
在工作區中運行腳本
過濾器會遵循你的 工作區配置:如果你有一個 package.json 文件指定哪些包屬於工作區,--filter 將僅限於這些包。此外,在工作區中,你可以使用 --filter 在工作區中任何位置的包中運行腳本:
# 包
# src/foo
# src/bar
# 在 src/bar 中:在 src/foo 中運行 myscript,無需 cd!
bun run --filter foo myscript依賴順序
Bun 在運行腳本時會遵循依賴順序。假設你在工作區中有一個包 foo 依賴於另一個包 bar,並且兩個包都有一個 build 腳本。當你運行 bun --filter '*' build 時,你會注意到 foo 只會在 bar 完成後才開始運行。