Bun

篩選器

--filter (或 -F) 標記用於在 monorepo 中依模式選擇套件。模式可以用於匹配套件名稱或套件路徑,並完整支援 glob 語法。

目前 bun installbun outdated 支援 --filter,並且也可以用於一次為多個套件執行腳本。

匹配

套件名稱 --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,其工作區 pkg-apkg-bpkg-c 位於 ./packages

# Install dependencies for all workspaces except `pkg-c`
bun install --filter '!pkg-c'

# Install dependencies for packages in `./packages` (`pkg-a`, `pkg-b`, `pkg-c`)
bun install --filter './packages/*'

# Save as above, but exclude the root package.json
bun install --filter --filter '!./' --filter './packages/*'

同樣地,bun outdated 將顯示 monorepo 中所有套件的過時依賴項,並且可以使用 --filter 將命令限制為套件的子集。

# Display outdated dependencies for workspaces starting with `pkg-`
bun outdated --filter 'pkg-*'

# Display outdated dependencies for only the root package.json
bun outdated --filter './'

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

使用 --filter 執行腳本

使用 --filter 標記一次在多個套件中執行腳本

bun --filter <pattern> <script>

假設您有一個 monorepo,其中包含兩個套件:packages/apipackages/frontend,它們都有一個 dev 腳本,將啟動本地開發伺服器。通常,您必須開啟兩個單獨的終端機視窗,cd 進入每個套件目錄,然後執行 bun dev

cd packages/api
bun dev

# in another terminal
cd packages/frontend
bun dev

使用 --filter,您可以一次在兩個套件中執行 dev 腳本

bun --filter '*' dev

這兩個命令將並行執行,您將看到一個漂亮的終端機 UI 顯示它們各自的輸出

Terminal Output

在工作區執行腳本

篩選器會遵循您的 工作區配置:如果您有一個 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 在執行腳本時將遵循套件相依性順序。假設您有一個套件 foo,它依賴於工作區中的另一個套件 bar,並且這兩個套件都有一個 build 腳本。當您執行 bun --filter '*' build 時,您會注意到 foo 只會在 bar 完成後才開始執行。