yarn dedupe
重複範圍的重複依賴項。
用法
$ yarn dedupe ...
範例
重複所有套件
yarn dedupe
使用特定策略重複所有套件
重複特定套件
重複所有具有 @babel/*
範圍的套件
檢查重複項(可用作 CI 步驟)
詳細資訊
重複項定義為具有重複範圍的描述符,且已解析並鎖定到不同的定位器。它們是 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
。
選項
定義 | 說明 |
---|---|
| 用於重複刪除依賴項的策略 |
| 在找到重複項時,退出並傳回退出碼 1,且不保留依賴項樹 |
| 將輸出格式化為 NDJSON 串流 |
| 變更安裝產生的成品 |