過濾
過濾功能可讓您將指令限制在特定套件子集。
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