npm 重復(fù)數(shù)據(jù)消除 dedupe

2021-10-29 10:48 更新

減少包樹(shù)中的重復(fù)

概要

npm dedupe
npm ddp


aliases: find-dupes, ddp

描述

搜索本地包樹(shù)并嘗試通過(guò)將依賴(lài)關(guān)系進(jìn)一步向上移動(dòng)樹(shù)來(lái)簡(jiǎn)化整體結(jié)構(gòu),在那里它們可以被多個(gè)依賴(lài)包更有效地共享。

例如,考慮這個(gè)依賴(lài)圖:

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將樹(shù)轉(zhuǎn)換為:

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

由于節(jié)點(diǎn)模塊查找的分層性質(zhì),b 和 d 都將通過(guò)樹(shù)根級(jí)別的單個(gè) c 包滿(mǎn)足它們的依賴(lài)關(guān)系。

在某些情況下,你可能有這樣的依賴(lài)關(guān)系圖:

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

在安裝過(guò)程中,c@1.0.3for的依賴(lài)b被放置在樹(shù)的根部。盡管d對(duì) 的依賴(lài)c@1.x可以由 滿(mǎn)足c@1.0.3,但c@1.9.0使用了較新的依賴(lài),因?yàn)?npm 默認(rèn)支持更新,即使這樣做會(huì)導(dǎo)致重復(fù)。

運(yùn)行npm dedupe會(huì)導(dǎo)致 npm 注意到重復(fù)并重新評(píng)估,刪除嵌套的c模塊,因?yàn)?root 中的一個(gè)就足夠了。

要在安裝過(guò)程中更喜歡重復(fù)數(shù)據(jù)刪除而不是新穎性,請(qǐng)運(yùn)行?npm install --prefer-dedupenpm config set prefer-dedupe true。

參數(shù)被忽略。Dedupe 始終作用于整個(gè)樹(shù)。

請(qǐng)注意,此操作會(huì)轉(zhuǎn)換依賴(lài)關(guān)系樹(shù),但永遠(yuǎn)不會(huì)導(dǎo)致安裝新模塊。

使用npm find-dupes將以--dry-run模式運(yùn)行命令。

配置

global-style 全局風(fēng)格

  • 默認(rèn)值:false
  • 類(lèi)型:Boolean

使 npm 以node_modules與全局node_modules文件夾相同的布局將包安裝到本地文件夾中。只有您的直接依賴(lài)項(xiàng)會(huì)顯示在其中,node_modules并且它們所依賴(lài)的所有內(nèi)容都將在其node_modules文件夾中展平。這顯然會(huì)消除一些重復(fù)數(shù)據(jù)刪除。如果與 一起使用legacy-bundling,legacy-bundling?將是首選。

legacy-bundling 繼承捆綁

  • 默認(rèn)值:false
  • 類(lèi)型:Boolean

使 npm 安裝包,以便 1.4 之前的 npm 版本,例如 node 0.8 中包含的版本,可以安裝該包。這消除了所有自動(dòng)重復(fù)數(shù)據(jù)刪除。如果與global-style此選項(xiàng)一起使用將是首選。

strict-peer-deps 嚴(yán)格對(duì)等依賴(lài)

  • 默認(rèn)值:false
  • 類(lèi)型:Boolean

如果設(shè)置為true,并且--legacy-peer-deps未設(shè)置,則任何?沖突peerDependencies都將被視為安裝失敗,即使 npm 可以根據(jù)非對(duì)等依賴(lài)關(guān)系合理猜測(cè)適當(dāng)?shù)慕鉀Q方案。

默認(rèn)情況下,peerDependencies依賴(lài)關(guān)系圖中的深層沖突將使用最近的非對(duì)等依賴(lài)項(xiàng)規(guī)范來(lái)解決,即使這樣做會(huì)導(dǎo)致某些包接收在其包peerDependencies對(duì)象中設(shè)置的范圍之外的對(duì)等依賴(lài)項(xiàng)。

當(dāng)執(zhí)行此類(lèi)和覆蓋時(shí),會(huì)打印警告,解釋沖突和所涉及的包。如果--strict-peer-deps設(shè)置,則此警告被視為失敗。

package-lock 包鎖

  • 默認(rèn)值:true
  • 類(lèi)型:Boolean

如果設(shè)置為 false,則package-lock.json在安裝時(shí)忽略文件。如果為真,這也將阻止寫(xiě)入?。package-lock.json``save

當(dāng)包包鎖被禁用時(shí),無(wú)關(guān)模塊的自動(dòng)修剪也將被禁用。要?jiǎng)h除禁用包鎖的無(wú)關(guān)模塊,請(qǐng)使用npm prune.

omit 省略

  • 默認(rèn)值:如果NODE_ENV環(huán)境變量設(shè)置為 production,則為dev?,否則為空。
  • 類(lèi)型:devoptionalpeer(可多次設(shè)置)

要從磁盤(pán)上的安裝樹(shù)中省略的依賴(lài)項(xiàng)類(lèi)型。

請(qǐng)注意,這些依賴(lài)的仍然解決,加入?package-lock.jsonnpm-shrinkwrap.json文件。它們只是沒(méi)有物理安裝在磁盤(pán)上。

如果包類(lèi)型同時(shí)出現(xiàn)在--include--omit列表中,則它將被包括在內(nèi)。

如果生成的省略列表包含'dev',則NODE_ENV環(huán)境變量將被設(shè)置'production'為所有生命周期腳本。

ignore-scripts 忽略腳本

  • 默認(rèn)值:false
  • 類(lèi)型:Boolean

如果為 true,則 npm 不會(huì)運(yùn)行 package.json 文件中指定的腳本。

請(qǐng)注意,明確用于運(yùn)行特定腳本的命令,例如?npm start,?npm stop,?npm restart,?npm test, 并且npm run-script?如果ignore-scripts已設(shè)置仍將運(yùn)行其預(yù)期腳本,但它們不會(huì)運(yùn)行任何前置或后置腳本。

audit 審計(jì)

  • 默認(rèn)值:true
  • 類(lèi)型:Boolean

當(dāng)為“true”時(shí),將審計(jì)報(bào)告與當(dāng)前 npm 命令一起提交到默認(rèn)注冊(cè)表和為范圍配置的所有注冊(cè)表。有關(guān)npm audit提交內(nèi)容的詳細(xì)信息,請(qǐng)參閱文檔。

bin-links bin鏈接

  • 默認(rèn)值:true
  • 類(lèi)型:Boolean

告訴 npm.cmd為包可執(zhí)行文件創(chuàng)建符號(hào)鏈接(或Windows 上的墊片)。 設(shè)置為 false 使其不這樣做。這可以用來(lái)解決一些文件系統(tǒng)不支持符號(hào)鏈接的事實(shí),即使在表面上是 Unix 系統(tǒng)上。

fund 資金

  • 默認(rèn)值:true
  • 類(lèi)型:Boolean

當(dāng)“true”在每個(gè)結(jié)尾處顯示消息時(shí),npm install?確認(rèn)正在尋找資金的依賴(lài)項(xiàng)的數(shù)量。

dry-run 試運(yùn)行

  • 默認(rèn)值:false
  • 類(lèi)型:Boolean

表示你不希望 npm 進(jìn)行任何更改并且它應(yīng)該只報(bào)告它會(huì)做的事情。這可以被傳遞到任何修改本地安裝,例如,命令的install,update,?dedupe,uninstall,以及packpublish。

注意:這不是由其他網(wǎng)絡(luò)相關(guān)的命令,如兌現(xiàn)dist-tags,?owner等等。

workspace 工作區(qū)

  • 默認(rèn):
  • 類(lèi)型:String(可多次設(shè)置)

允許在當(dāng)前項(xiàng)目的已配置工作區(qū)的上下文中運(yùn)行命令,同時(shí)通過(guò)僅運(yùn)行此配置選項(xiàng)定義的工作區(qū)進(jìn)行過(guò)濾。

workspace配置的有效值為:

  • 工作區(qū)名稱(chēng)
  • 工作區(qū)目錄的路徑
  • 父工作區(qū)目錄的路徑(將導(dǎo)致選擇所有嵌套工作區(qū))

為該npm init命令設(shè)置時(shí),可以將其設(shè)置為尚不存在的工作區(qū)的文件夾,以創(chuàng)建該文件夾并將其設(shè)置為項(xiàng)目中的全新工作區(qū)。

此值不會(huì)導(dǎo)出到子進(jìn)程的環(huán)境中。

workspaces 工作區(qū)

  • 默認(rèn)值:false
  • 類(lèi)型:Boolean

啟用在所有已配置工作區(qū)的上下文中運(yùn)行命令。

此值不會(huì)導(dǎo)出到子進(jìn)程的環(huán)境中。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)