目錄
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 相依性
如果 app
的 package.json
包含
"dependencies": {"dep1": "^1.1.1"}
則 npm update
會安裝 dep1@1.2.2
,因為 1.2.2
是 latest
,而且 1.2.2
符合 ^1.1.1
。
Tilde 相依性
然而,如果 app
的 package.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.json
或 npm-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 pack
或npm publish
,其預設值為true
- 類型:布林值
在前景處理中執行已安裝套件的所有建置指令碼(即,preinstall
、install
和 postinstall
)指令碼,與主要 npm 處理分享標準輸入、輸出和錯誤。
請注意,這通常會使安裝執行速度變慢,而且會產生更多雜訊,但對於除錯很有用。
忽略指令碼
- 預設:false
- 類型:布林值
如果為 true,npm 就不會執行 package.json 檔案中指定的指令碼。
請注意,明確用於執行特定指令碼的命令(例如 npm start
、npm stop
、npm restart
、npm test
和 npm run-script
)如果設定了 ignore-scripts
,仍然會執行其預期的指令碼,但它們不會執行任何前置或後置指令碼。
稽核
- 預設值:true
- 類型:布林值
如果為「true」,將稽核報告與目前的 npm 命令一起提交到預設登錄和所有為範圍設定的登錄。請參閱 npm audit
的文件,以了解提交內容的詳細資訊。
bin 連結
- 預設值:true
- 類型:布林值
指示 npm 為套件可執行檔建立符號連結(或在 Windows 上建立 .cmd
shim)。
設定為 false 以讓它不執行此動作。這可以用於解決一些檔案系統不支援符號連結的事實,即使是在表面上為 Unix 系統也是如此。
資金
- 預設值:true
- 類型:布林值
如果為「true」,會在每個 npm install
的結尾顯示訊息,確認尋求資金的相依性數量。請參閱 npm fund
以取得詳細資訊。
空跑
- 預設:false
- 類型:布林值
表示您不希望 npm 進行任何變更,而且它應該只報告它會執行的動作。這可以傳遞給任何修改您當地安裝的命令,例如 install
、update
、dedupe
、uninstall
,以及 pack
和 publish
。
請注意:其他網路相關命令(例如 dist-tags
、owner
等)不會遵循此設定。
工作區
- 預設值
- 類型:字串(可以設定多次)
啟用在目前專案設定的工作空間背景下執行指令,同時依據這個設定選項所定義的工作空間進行過濾。
workspace
設定的有效值為
- 工作空間名稱
- 工作空間目錄路徑
- 父工作空間目錄路徑(將會選取該資料夾內的所有工作空間)
設定為 npm init
指令時,可以設定為尚未存在的資料夾,以建立資料夾並將其設定為專案內全新的工作空間。
這個值不會匯出到子程序的環境。
工作區
- 預設值:null
- 類型:null 或布林值
設定為 true 以在所有設定的工作空間背景下執行指令。
明確設定為 false 將會導致像 install
等指令完全忽略工作空間。未明確設定時
- 對
node_modules
樹狀結構進行操作的指令(安裝、更新等)會將工作空間連結到node_modules
資料夾。- 執行其他操作的指令(測試、執行、發布等)會在根目錄專案上執行,除非在workspace
設定中指定一個或多個工作空間。
這個值不會匯出到子程序的環境。
包含工作區根目錄
- 預設:false
- 類型:布林值
在為指令啟用工作空間時包含工作空間根目錄。
為 false 時,透過 workspace
設定指定個別工作空間,或透過 workspaces
旗標指定所有工作空間,會導致 npm 只在指定的工作空間上執行,而不在根目錄專案上執行。
這個值不會匯出到子程序的環境。
安裝連結
- 預設:false
- 類型:布林值
設定時,file:協定相依項會打包並安裝為一般相依項,而不是建立符號連結。這個選項對工作空間沒有影響。