你想知道如何將存放在 package.json 檔案中的所有 npm 套件的相依性更新至其最新可用版本嗎?
當你使用 npm install <packageName>
安裝套件時,最新可用版本的套件會被下載並放置在 node_modules
資料夾中,同時也會在目前資料夾中的 package.json 和 package-lock.json 檔案中新增對應的項目。
npm 會計算這些相依性並安裝最新可用的版本。
假設你安裝了一個名為 cowsay
的酷炫命令列工具,可以讓一隻牛說出一些事情。
當你執行 npm install cowsay
時,以下項目會被新增至 package.json 檔案:
{
"dependencies": {
"cowsay": "^1.3.1"
}
}
以下是 package-lock.json 的相關內容,為了清晰起見,我移除了巢狀相依性的部分:
{
"requires": true,
"lockfileVersion": 1,
"dependencies": {
"cowsay": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/cowsay/-/cowsay-1.3.1.tgz",
"integrity": "sha512-3PVFe6FePVtPj1HTeLin9v8WyLl+VmM1l1H/5P+BTTDkMAjufp+0F9eLjzRnOHzVAYeIYFF5po5NjRrgefnRMQ==",
"requires": {
"get-stdin": "^5.0.1",
"optimist": "~0.6.1",
"string-width": "~2.1.1",
"strip-eof": "^1.0.0"
}
}
}
}
這兩個檔案告訴我們,我們安裝了 cowsay 的 1.3.1 版本,而我們的更新規則是 ^1.3.1
,根據 npm 的版本規則,這代表 npm 可以更新到修補程式和次要版本:1.3.2、1.4.0 等等。
但對於破壞性變更的主要版本更新,例如 2.0 以及更高版本,則不會透過這種方式進行更新。
如果有新的次要或修補版本釋出並輸入 npm update
,安裝的版本會更新,而 package-lock.json 檔案也會盡職地填入新的版本,但 package.json 則不會有變動。
要查看套件的新版本,可以執行 npm outdated
。
以下是某個我相當一段時間未更新的專案中一些過時套件的清單:
其中有一些更新是屬於主要版本,但執行 npm update
不會更新這些版本。這是因為主要版本(根據其定義)會引入破壞性變更,而 npm 希望避免給你帶來困擾。
要將所有套件升級至新的主要版本,請先全域安裝 npm-check-updates
套件:
npm install -g npm-check-updates
然後執行以下命令:
ncu -u
這會將 package.json 檔案中的所有版本提示更新為新的相依性和開發相依性,以便 npm 可以安裝新的主要版本。
現在你已經準備好執行更新:
npm update
如果你只下載了專案而沒有安裝 node_modules
的相依性,你可以先執行以下命令安裝這些全新的版本:
npm install