--filter
(或 -F
) 標記用於在 monorepo 中依模式選擇套件。模式可以用於匹配套件名稱或套件路徑,並完整支援 glob 語法。
目前 bun install
和 bun outdated
支援 --filter
,並且也可以用於一次為多個套件執行腳本。
匹配
套件名稱 --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,其工作區 pkg-a
、pkg-b
和 pkg-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 install
和 bun outdated
。
使用 --filter
執行腳本
使用 --filter
標記一次在多個套件中執行腳本
bun --filter <pattern> <script>
假設您有一個 monorepo,其中包含兩個套件:packages/api
和 packages/frontend
,它們都有一個 dev
腳本,將啟動本地開發伺服器。通常,您必須開啟兩個單獨的終端機視窗,cd 進入每個套件目錄,然後執行 bun dev
cd packages/api
bun dev
# in another terminal
cd packages/frontend
bun dev
使用 --filter
,您可以一次在兩個套件中執行 dev
腳本
bun --filter '*' dev
這兩個命令將並行執行,您將看到一個漂亮的終端機 UI 顯示它們各自的輸出
在工作區執行腳本
篩選器會遵循您的 工作區配置:如果您有一個 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
完成後才開始執行。