跳至主要內容

yarn dedupe

重複範圍的重複依賴項。

用法

$ yarn dedupe ...

範例

重複所有套件

yarn dedupe

使用特定策略重複所有套件

yarn dedupe --strategy highest

重複特定套件

yarn dedupe lodash

重複所有具有 @babel/* 範圍的套件

yarn dedupe @babel/*

檢查重複項(可用作 CI 步驟)

yarn dedupe --check

詳細資訊

重複項定義為具有重複範圍的描述符,且已解析並鎖定到不同的定位器。它們是 Yarn 決定性安裝的自然結果,但有時它們會堆積起來並不必要地增加專案大小。

此命令使用不同的策略(目前只實作一種)重複當前專案中的依賴項

  • highest:盡可能重複使用具有最高版本的定位器。這表示只能升級依賴項,絕不降級。它也保證絕不會花費超過一次的傳遞來重複整個依賴項樹。

注意:即使它絕不會產生錯誤的依賴項樹,此命令也應謹慎使用,因為它會修改依賴項樹,當套件不完全遵循 semver 建議時,有時可能會造成問題。因此,建議也手動檢閱變更。

如果已設定,-c,--check 旗標將只報告找到的重複項,而不保留修改後的依賴項樹。如果找到變更,命令將退出並產生非零退出碼,使其適合 CI 用途。

如果設定 --mode=<mode> 選項,Yarn 將變更產生的成品。目前支援的模式為

  • skip-build 根本不會執行建置指令碼。請注意,這與將 enableScripts 設定為 false 不同,因為後者會停用建置指令碼,並因此影響磁碟上產生的成品內容,而前者只會停用建置步驟 - 但不會停用指令碼本身,只是不會執行。

  • update-lockfile 將完全略過連結步驟,並且只擷取鎖定檔案中遺失的套件(或沒有關聯檢查碼的套件)。此模式通常由 Renovate 或 Dependabot 等工具用於在不產生完整安裝成本的情況下,保持鎖定檔案為最新狀態。

此指令接受 glob 模式作為引數(如果為有效的 Ident,且由 micromatch 支援)。請務必跳脫模式,以防止您自己的 shell 嘗試擴充它們。

深入說明:

Yarn 預設不會對依賴項進行重複資料刪除,否則安裝不會是確定性的,而鎖定檔案將毫無用處。它實際上所做的是,它嘗試從一開始就不重複依賴項。

範例:如果 foo@^2.3.4(依賴項的依賴項)已解析為 foo@2.3.4,則執行 yarn add foo@* 將導致 Yarn 重複使用 foo@2.3.4,即使最新的 foo 實際上是 foo@2.10.14,從而防止不必要的重複。

當 Yarn 無法解除已鎖定在鎖定檔案內的依賴項時,就會發生重複。

範例:如果 foo@^2.3.4(依賴項的依賴項)已解析為 foo@2.3.4,則執行 yarn add foo@2.10.14 將導致 Yarn 安裝 foo@2.10.14,因為現有的解析不符合範圍 2.10.14。此行為可能會導致(有時)不需要的重複,因為現在鎖定檔案包含 2 個 foo 敘述的 2 個獨立解析,即使它們有重疊的範圍,這表示鎖定檔案可以簡化,以便兩個敘述都解析為 foo@2.10.14

選項

定義說明

-s,--strategy #0

用於重複刪除依賴項的策略

-c,--check

在找到重複項時,退出並傳回退出碼 1,且不保留依賴項樹

--json

將輸出格式化為 NDJSON 串流

--mode #0

變更安裝產生的成品