Skip to content

--filter(或 -F)標志用於在 monorepo 中按模式選擇包。模式可用於匹配包名稱或包路徑,支持完整的 glob 語法。

目前 --filter 支持 bun installbun outdated,也可用於一次性運行多個包的腳本。


匹配

包名稱 --filter <pattern>

名稱模式根據 package.json 中指定的包名稱選擇包。例如,如果你有包 pkg-apkg-bother,你可以使用 * 匹配所有包,使用 pkg* 僅匹配 pkg-apkg-b,或者通過提供包的完整名稱來匹配特定包。

包路徑 --filter ./<glob>

路徑模式通過以 ./ 開頭指定,將選擇所有匹配目錄中的包。例如,要匹配 packages 子目錄中的所有包,可以使用 --filter './packages/**'。要匹配位於 packages/foo 中的包,使用 --filter ./packages/foo


bun installbun outdated

bun installbun outdated 都支持 --filter 標志。

bun install 默認會安裝 monorepo 中所有包的依賴。要安裝特定包的依賴,請使用 --filter

給定一個 monorepo,在 ./packages 下有工作區 pkg-apkg-bpkg-c

bash
# 為除 `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 可用於將命令限制為包的子集:

bash
# 顯示以 `pkg-` 開頭的工作區的過時依賴
bun outdated --filter 'pkg-*'

# 僅顯示根 package.json 的過時依賴
bun outdated --filter './'

有關這兩個命令的更多信息,請參閱 bun installbun outdated


使用 --filter 運行腳本

使用 --filter 標志一次性在多個包中執行腳本:

bash
bun --filter <pattern> <script>

假設你有一個 monorepo,其中有兩個包:packages/apipackages/frontend,它們都有一個 dev 腳本用於啟動本地開發服務器。通常,你必須打開兩個單獨的終端標簽頁,cd 進入每個包目錄,然後運行 bun dev

bash
cd packages/api
bun dev

# 在另一個終端中
cd packages/frontend
bun dev

使用 --filter,你可以一次性在兩個包中運行 dev 腳本:

bash
bun --filter '*' dev

兩個命令將並行運行,你將看到一個漂亮的終端 UI 顯示它們各自的輸出:

在工作區中運行腳本

過濾器會遵循你的 工作區配置:如果你有一個 package.json 文件指定哪些包屬於工作區,--filter 將僅限於這些包。此外,在工作區中,你可以使用 --filter 在工作區中任何位置的包中運行腳本:

bash
# 包
# src/foo
# src/bar

# 在 src/bar 中:在 src/foo 中運行 myscript,無需 cd!
bun run --filter foo myscript

依賴順序

Bun 在運行腳本時會遵循依賴順序。假設你在工作區中有一個包 foo 依賴於另一個包 bar,並且兩個包都有一個 build 腳本。當你運行 bun --filter '*' build 時,你會注意到 foo 只會在 bar 完成後才開始運行。

Bun學習網由www.bunjs.com.cn整理維護