npm-update

更新套件

選擇 CLI 版本

概要

npm update [<pkg>...]
aliases: up, upgrade, udpate

說明

此指令會將所有列出的套件更新至最新版本 (由 tag 設定 指定),並遵守套件及其依賴項 (如果它們也需要相同的套件) 的 semver 限制。

它還會安裝遺失的套件。

如果指定 -g 旗標,此指令會更新已安裝的全球套件。

如果未指定套件名稱,則會更新指定位置 (全域或本機) 中的所有套件。

請注意,預設情況下 npm update 不會更新專案 package.json 中直接依賴項的 semver 值。如果您也想要更新 package.json 中的值,您可以執行:npm update --save (或將 save=true 選項新增至 設定檔,以將其設為預設行為)。

範例

對於以下範例,假設目前的套件為 app,且它依賴於依賴項 dep1 (dep2,... 等)。dep1 的已發布版本為

{
"dist-tags": { "latest": "1.2.2" },
"versions": [
"1.2.2",
"1.2.1",
"1.2.0",
"1.1.2",
"1.1.1",
"1.0.0",
"0.4.1",
"0.4.0",
"0.2.0"
]
}

Caret 相依性

如果 apppackage.json 包含

"dependencies": {
"dep1": "^1.1.1"
}

npm update 會安裝 dep1@1.2.2,因為 1.2.2latest,而且 1.2.2 符合 ^1.1.1

Tilde 相依性

然而,如果 apppackage.json 包含

"dependencies": {
"dep1": "~1.1.1"
}

在這種情況下,執行 npm update 將安裝 dep1@1.1.2。即使 latest 標籤指向 1.2.2,這個版本也不滿足 ~1.1.1,這等於 >=1.1.1 <1.2.0。因此,將使用滿足 ~1.1.1 的最高排序版本,即 1.1.2

低於 1.0.0 的 Caret 相依性

假設 app 對低於 1.0.0 的版本有插入符號依賴項,例如

"dependencies": {
"dep1": "^0.2.0"
}

npm update 將安裝 dep1@0.2.0

如果依賴項在 ^0.4.0

"dependencies": {
"dep1": "^0.4.0"
}

然後 npm update 將安裝 dep1@0.4.1,因為那是滿足 ^0.4.0 (>= 0.4.0 <0.5.0) 的最高排序版本

次相依性

假設您的應用程式現在也對 dep2 有依賴項

{
"name": "my-app",
"dependencies": {
"dep1": "^1.0.0",
"dep2": "1.0.0"
}
}

dep2 本身依賴於 dep1 的這個有限範圍

{
"name": "dep2",
"dependencies": {
"dep1": "~1.1.1"
}
}

然後 npm update 將安裝 dep1@1.1.2,因為那是 dep2 允許的最高版本。npm 優先在您的樹中有一個 dep1 的單一版本,而不是兩個,當該單一版本可以滿足您的樹中多個依賴項的 semver 需求時。在這種情況下,如果您真的需要您的套件使用較新的版本,您需要使用 npm install

更新全球安裝的套件

npm update -g 將對每個已過時的全局安裝套件套用 update 動作,也就是說,版本與 wanted 不同。

注意:全球安裝的套件會被視為已安裝,並指定為插入符號 semver 範圍。因此,如果您需要更新到 最新,您可能需要執行 npm install -g [<pkg>...]

注意:如果套件已升級到比 最新 更新的版本,它將會被降級

設定

儲存

  • 預設:true,除非使用 npm update,預設為 false
  • 類型:布林值

將安裝的套件儲存到 package.json 檔案中,作為相依性。

npm rm 命令一起使用時,會從 package.json 中移除相依性。

如果設定為 false,也會防止寫入 package-lock.json

全域

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

在「全域」模式中操作,以便將套件安裝到 prefix 資料夾,而不是目前的作業目錄。請參閱 資料夾,以進一步了解行為差異。

  • 套件會安裝到 {prefix}/lib/node_modules 資料夾,而不是目前的作業目錄。
  • bin 檔案會連結到 {prefix}/bin
  • man 頁面會連結到 {prefix}/share/man

安裝策略

  • 預設:「hoisted」
  • 類型:「hoisted」、「nested」、「shallow」或「linked」

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

舊式套件

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

不要在 node_modules 中提升套件安裝,而是以相依的相同方式安裝套件。由於沒有重複資料刪除,這可能會導致非常深的目錄結構和重複的套件安裝。設定 --install-strategy=nested

全域樣式

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

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

省略

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

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

請注意,這些相依性仍然會解析,並加入 package-lock.jsonnpm-shrinkwrap.json 檔案中。它們只是不會實體安裝在磁碟上。

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

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

包含

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

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

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

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

嚴格同儕依賴項

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

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

預設情況下,相依性圖中深層的衝突 peerDependencies 會使用最近的非 peer 相依性規格來解析,即使這樣做會導致某些封包收到超出其封包的 peerDependencies 物件中設定的範圍的 peer 相依性。

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

套件鎖定

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

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

前景指令碼

  • 預設值:false,除非使用 npm packnpm publish,其預設值為 true
  • 類型:布林值

在前景處理中執行已安裝套件的所有建置指令碼(即,preinstallinstallpostinstall)指令碼,與主要 npm 處理分享標準輸入、輸出和錯誤。

請注意,這通常會使安裝執行速度變慢,而且會產生更多雜訊,但對於除錯很有用。

忽略指令碼

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

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

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

稽核

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

如果為「true」,將稽核報告與目前的 npm 命令一起提交到預設登錄和所有為範圍設定的登錄。請參閱 npm audit 的文件,以了解提交內容的詳細資訊。

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

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

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

資金

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

如果為「true」,會在每個 npm install 的結尾顯示訊息,確認尋求資金的相依性數量。請參閱 npm fund 以取得詳細資訊。

空跑

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

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

請注意:其他網路相關命令(例如 dist-tagsowner 等)不會遵循此設定。

工作區

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

啟用在目前專案設定的工作空間背景下執行指令,同時依據這個設定選項所定義的工作空間進行過濾。

workspace 設定的有效值為

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

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

這個值不會匯出到子程序的環境。

工作區

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

設定為 true 以在所有設定的工作空間背景下執行指令。

明確設定為 false 將會導致像 install 等指令完全忽略工作空間。未明確設定時

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

這個值不會匯出到子程序的環境。

包含工作區根目錄

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

在為指令啟用工作空間時包含工作空間根目錄。

為 false 時,透過 workspace 設定指定個別工作空間,或透過 workspaces 旗標指定所有工作空間,會導致 npm 只在指定的工作空間上執行,而不在根目錄專案上執行。

這個值不會匯出到子程序的環境。

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

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

另請參閱