npm-dedupe

減少套件樹中的重複

選擇 CLI 版本

概要

npm dedupe
alias: ddp

說明

搜尋本機套件樹,並嘗試透過將相依性往上移至樹狀結構中,讓多個相依套件可以更有效地共用,來簡化整體結構。

例如,考慮這個相依性圖表

a
+-- b <-- depends on c@1.0.x
| `-- c@1.0.3
`-- d <-- depends on c@~1.0.9
`-- c@1.0.10

在此情況下,npm dedupe 會將樹狀結構轉換為

a
+-- b
+-- d
`-- c@1.0.10

由於節點模組查詢的階層性質,b 和 d 都會從樹狀結構根層級的單一 c 套件中取得相依性。

在某些情況下,您可能有如下所示的相依圖形

a
+-- b <-- depends on c@1.0.x
+-- c@1.0.3
`-- d <-- depends on c@1.x
`-- c@1.9.9

在安裝過程中,bc@1.0.3 相依項被放置在樹的根目錄中。儘管 dc@1.x 的相依項可以由 c@1.0.3 滿足,但因為 npm 預設偏好更新,即使這樣做會造成重複,因此使用了較新的 c@1.9.0 相依項。

執行 npm dedupe 將會導致 npm 注意到重複並重新評估,刪除巢狀的 c 模組,因為根目錄中的模組就已足夠。

若要在安裝過程中偏好重複消除而非新穎性,請執行 npm install --prefer-dedupenpm config set prefer-dedupe true

忽略引數。Dedupe 永遠作用於整個樹。

請注意,此操作會轉換相依項樹,但絕不會導致安裝新的模組。

使用 npm find-dupes 將會以 --dry-run 模式執行命令。

注意:npm dedupe 絕不會更新您專案 package.json 中直接相依項的 semver 值,如果您想要更新 package.json 中的值,您可以改為執行:npm update --save

組態

install-strategy

  • 預設值:hoisted
  • 類型:hoistednestedshallowlinked

設定在 node_modules 中安裝套件的策略。hoisted(預設值):在頂層安裝非重複的套件,並在目錄結構中視需要安裝重複的套件。nested:(以前稱為 --legacy-bundling)就地安裝,不提升。shallow(以前稱為 --global-style)僅在頂層安裝直接相依項。linked:(實驗性)安裝在 node_modules/.store 中,就地連結,不提升。

legacy-bundling

  • 預設值:false
  • 類型:布林值
  • 已過時:此選項已過時,建議改用 --install-strategy=nested

與其在 node_modules 中提升套件安裝,不如以與其相依的方式安裝套件。這可能會造成非常深的目錄結構和重複的套件安裝,因為沒有重複消除。設定 --install-strategy=nested

global-style

  • 預設值:false
  • 類型:布林值
  • 已過時:此選項已過時,建議改用 --install-strategy=shallow

僅在頂層 node_modules 中安裝直接相依項,但在較深的相依項中提升。設定 --install-strategy=shallow

strict-peer-deps

  • 預設值:false
  • 類型:布林值

如果設定為 true,且未設定 --legacy-peer-deps,則任何衝突的 peerDependencies 都將被視為安裝失敗,即使 npm 可以根據非同儕相依關係合理猜測適當的解析方式。

預設情況下,相依關係圖中較深層的衝突 peerDependencies 會使用最近的非對等相依關係規格來解決,即使這樣做會導致某些套件接收其套件的 peerDependencies 物件中設定的範圍外的對等相依關係。

當執行此類覆寫時,會印出一個警告,說明衝突和所涉及的套件。如果設定 --strict-peer-deps,則此警告會視為失敗。

package-lock

  • 預設值:true
  • 類型:布林值

如果設定為 false,則在安裝時忽略 package-lock.json 檔案。如果 save 為 true,這也會防止寫入 package-lock.json

omit

  • 預設值:如果 NODE_ENV 環境變數設定為 'production',則為 'dev',否則為空。
  • 類型:'dev'、'optional' 或 'peer'(可以設定多次)

從磁碟上的安裝樹中省略的相依關係類型。

請注意,這些相依關係仍然會解析並新增到 package-lock.jsonnpm-shrinkwrap.json 檔案中。它們只是不會實際安裝在磁碟上。

如果套件類型同時出現在 --include--omit 清單中,則會將其包含在內。

如果產生的省略清單包含 'dev',則 NODE_ENV 環境變數會設定為 'production' 以適用於所有生命週期指令碼。

include

  • 預設值
  • 類型:'prod'、'dev'、'optional' 或 'peer'(可以設定多次)

允許定義要安裝的相依關係類型的選項。

這是 --omit=<type> 的反向操作。

--include 中指定的相依關係類型不會被省略,無論在命令列中指定省略/包含的順序為何。

ignore-scripts

  • 預設值:false
  • 類型:布林值

如果為 true,npm 就不會執行 package.json 檔案中指定的指令碼。

請注意,明確用於執行特定指令碼的命令,例如 npm startnpm stopnpm restartnpm testnpm run-script,如果設定 ignore-scripts,仍然會執行其預期的指令碼,但不會執行任何前置或後置指令碼。

audit

  • 預設值:true
  • 類型:布林值

當「true」時,連同目前的 npm 指令,將稽核報告提交至預設登錄程式和所有為範圍設定的登錄程式。請參閱 npm audit 的文件,以取得關於提交內容的詳細資料。

  • 預設值:true
  • 類型:布林值

指示 npm 為套件可執行檔建立符號連結(或在 Windows 上為 .cmd shim)。

設為 false 以不執行此動作。這可用於解決某些檔案系統不支援符號連結的事實,即使在表面上是 Unix 系統。

fund

  • 預設值:true
  • 類型:布林值

當「true」時,在每次 npm install 的結尾顯示訊息,確認尋找資金的相依項數量。請參閱 npm fund 以取得詳細資料。

dry-run

  • 預設值:false
  • 類型:布林值

表示您不希望 npm 進行任何變更,且它應該只報告它會執行的動作。這可以傳遞至任何修改您當地安裝的指令,例如 installupdatededupeuninstall,以及 packpublish

注意:這不會受到其他網路相關指令的尊重,例如 dist-tagsowner 等。

workspace

  • 預設值
  • 類型:字串(可以設定多次)

在當前專案設定的工作空間環境中執行指令,同時透過僅執行此設定選項所定義的工作空間來進行篩選。

下列為 workspace 設定的有效值

  • 工作空間名稱
  • 工作空間目錄路徑
  • 父工作空間目錄路徑(將會選取該資料夾中的所有工作空間)

當設定為 npm init 指令時,這可能會設定為尚未存在的資料夾,以建立資料夾並將其設定為專案中的全新工作空間。

此值不會匯出至子程序的環境。

workspaces

  • 預設值:null
  • 類型:null 或布林值

設為 true 以在所有已設定工作區的內容中執行指令。

明確將此設定為 false 將導致類似 install 的指令完全忽略工作區。未明確設定時

  • node_modules 樹狀結構中執行的指令(安裝、更新等)會將工作區連結到 node_modules 資料夾中。- 執行其他動作的指令(測試、執行、發布等)會在根目錄專案中執行,除非workspace 設定中指定一個或多個工作區。

此值不會匯出至子程序的環境。

include-workspace-root

  • 預設值:false
  • 類型:布林值

在為指令啟用工作區時,包含工作區根目錄。

為 false 時,透過 workspace 設定指定個別工作區,或透過 workspaces 標記指定所有工作區,將導致 npm 僅在指定的工作區中執行,而不是在根目錄專案中執行。

此值不會匯出至子程序的環境。

  • 預設值:false
  • 類型:布林值

設定時,file: 協定相依性會打包並安裝為一般相依性,而不是建立符號連結。此選項對工作區沒有影響。

另請參閱