跳到主要內容
版本:9.x

過濾

過濾功能可讓您將指令限制在特定套件子集。

pnpm 支援豐富的選取器語法,可依名稱或關聯性挑選套件。

選取器可透過 --filter(或 -F)旗標指定

pnpm --filter <package_selector> <command>

配對

--filter <package_name>

若要選取特定套件,請指定其名稱(@scope/pkg)或使用模式選取一組套件(@scope/*)。

範例

pnpm --filter "@babel/core" test
pnpm --filter "@babel/*" test
pnpm --filter "*core" test

指定套件的範圍是選配的,所以如果找不到 core--filter=core 會選取 @babel/core。不過,如果工作區有多個名稱相同的套件(例如 @babel/core@types/core),則不指定範圍的過濾會選取不到任何內容。

--filter <套件名稱>...

若要選取套件及其依賴項 (直接和非直接),請在套件名稱後面加上省略號:<套件名稱>...。例如,下一個指令會執行 foo 和其所有依賴項的測試

pnpm --filter foo... test

你可以使用樣式來選取一組根套件

pnpm --filter "@babel/preset-*..." test

--filter <套件名稱>^...

若要僅選取套件的依賴項 (直接和非直接),請在名稱後面加上前面提到的省略號,並加上一個小於號。例如,下一個指令會執行 foo 所有依賴項的測試

pnpm --filter "foo^..." test

--filter ...<套件名稱>

若要選取套件及其依賴套件 (直接和非直接),請在套件名稱前面加上省略號:...<套件名稱>。例如,這將執行 foo 和所有依賴於它的套件的測試

pnpm --filter ...foo test

--filter "...^<套件名稱>"

若要僅選取套件的依賴項 (直接和非直接),請在套件名稱前面加上省略號,並加上一個小於號。例如,這將執行依賴於 foo 的所有套件的測試

pnpm --filter "...^foo" test

--filter ./<glob>, --filter {<glob>}

與當前工作目錄相對應的 glob 樣式,用於比對專案。

pnpm --filter "./packages/**" <cmd>

包含指定目錄下的所有專案。

它可以與省略號和小於號運算子一起使用,以選取依賴項/依賴項

pnpm --filter ...{<directory>} <cmd>
pnpm --filter {<directory>}... <cmd>
pnpm --filter ...{<directory>}... <cmd>

它也可以與 [<since>] 結合使用。例如,若要選取目錄內所有已變更的專案

pnpm --filter "{packages/**}[origin/master]" <cmd>
pnpm --filter "...{packages/**}[origin/master]" <cmd>
pnpm --filter "{packages/**}[origin/master]..." <cmd>
pnpm --filter "...{packages/**}[origin/master]..." <cmd>

或者,你可以從目錄中選取所有名稱與給定樣式相符的套件

pnpm --filter "@babel/*{components/**}" <cmd>
pnpm --filter "@babel/*{components/**}[origin/master]" <cmd>
pnpm --filter "...@babel/*{components/**}[origin/master]" <cmd>

--filter "[<since>]"

選取自指定提交/分支以來已變更的所有套件。可以在後面或前面加上 ... 以包含依賴項/依賴項。

例如,下一個指令會執行自 master 以來所有已變更套件中的測試,以及任何依賴套件中的測試

pnpm --filter "...[origin/master]" test

--fail-if-no-match

如果您希望在沒有套件符合篩選條件時,CLI 失敗,請使用這個旗標。

排除

任何篩選器選擇器在前面加上「!」時,都可以作為排除運算子。在 zsh(以及其他 shell)中,「!」應該加上跳脫字元:\!

例如,這將在所有專案中執行指令,但 foo 除外

pnpm --filter=!foo <cmd>

這將在所有不在 lib 目錄下的專案中執行指令

pnpm --filter=!./lib <cmd>

多重性

當套件經過篩選時,會選取符合至少一個選擇器的每個套件。您可以使用任意數量的篩選器

pnpm --filter ...foo --filter bar --filter baz... test

--filter-prod <filtering_pattern>

作用與 --filter 相同,但從工作區中選擇相依套件專案時,會省略 devDependencies

--test-pattern <glob>

test-pattern 可用來偵測已修改的檔案是否與測試相關。如果是,則不會包含此類已修改套件的相依套件。

此選項與「已變更時間」篩選器搭配使用時很有用。例如,下一個指令將在所有已變更套件中執行測試,如果變更在套件的原始程式碼中,則測試也會在相依套件中執行

pnpm --filter="...[origin/master]" --test-pattern="test/*" test

--changed-files-ignore-pattern <glob>

在根據指定的提交/分支篩選已變更專案時,允許透過 glob 模式忽略已變更的檔案。

使用範例

pnpm --filter="...[origin/master]" --changed-files-ignore-pattern="**/README.md" run build