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 

兩個指令會並行執行,您會看到一個漂亮的終端機使用者介面,顯示它們各自的輸出

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 會在執行指令碼時尊重套件相依性順序。假設您有一個套件 foo,它在您的工作區中相依於另一個套件 bar,並且這兩個套件都有 build 指令碼。當您執行 bun --filter '*' build 時,您會注意到 foo 會在 bar 完成後才開始執行。

循環相依性