如何更新package.json文件中的每个包至最新版本?

25
在你标记它为重复之前,我已经搜索了类似的问题,但没有一个能帮助我。目前这是我尝试过的内容: 1. 删除package-lock.json文件。 2. 删除node_modules文件夹。 3. 运行npm update命令。 4. 运行npm install命令。
这将始终允许我安装node_modules中最新(次要)版本的软件包,并更新package-lock.json文件。然而,package.json文件不会更新。 例如,我的moment在package.json中被写成“moment”:“^ 2.27.0”。运行上述步骤后,package-lock.json将更新为“moment”:{ “version”:“2.29.1”, ...}但是package.json仍然是“moment”:“^ 2.27.0”。
请问正确的方法是什么?手动运行npm install moment会更新package.json以成为“moment”:“^2.29.1”,但如果每个依赖项都必须运行npm install,这相当荒谬。
编辑:感谢所选答案,我意识到实际上不需要更新我的package.json,因为它显示的是兼容版本,而不是确切的版本。

2
这个回答解决了你的问题吗?如何将package.json中的每个依赖项更新到最新版本? - Daniel_Knights
基本上,获取 npm-check-updates (ncu) https://www.npmjs.com/package/npm-check-updates - nntrn
南昌大学更新到最新的次要或主要版本了吗?我不想升级到下一个主要版本,因为这可能会破坏一些东西。 - Samson
3个回答

18

npm outdated 列出可以使用当前、期望和最新版本号进行更新的所有包。

  • current 是当前安装的版本
  • wanted 是最后一个小版本更新
  • latest 是最新的大版本更新

要将所有包更新为最新版本,请执行以下操作:

npm outdated | awk 'NR>1 {print $1"@"$4}' | xargs npm install

该命令会简单地调用npm install,安装每个过时包的最新版本。

强烈建议您检查生成的更改,以确保所有更改符合预期,包括您的packages.json文件。


1
我也是!我检查了package.json并注意到它将bootstrap从4更新到5,这是不希望发生的,所以我只是赞同@user1656671的建议,检查结果的更改。 - stevec
如果您使用pnpm,只需运行pnpm outdated即可。 - Ben Butterworth
哇,感谢你的一行代码,它做得很好! - Alex Kogan

17

package.json 不会被 npm install 更新。它包含了依赖项和兼容版本列表。

"moment": "^2.27.0" 的意思是允许使用 moment 版本为 2.27.0 <= version < 3.0.0,而不是只允许使用 moment 版本为 2.27.0。所以当你运行 npm install 时,npm 会安装 major version 为 2 的最新版本(在你的情况下是 2.29.1),但是这个命令不会更新 package.json,因为它包含的是兼容版本而非已安装的版本。

然而,npm install moment 命令会安装 moment 的最新版本,所以 package.json 会被更新为最新版本,因为 "^2.27.0" 小于 "^2.29.1"

无论如何,如果你想要更新你的 package.json,可以使用 npm-check-updates(也称为 ncu)。请参见这个答案。如果你不想运行 ncu,你可以随时使用 "latest"(例如:"moment": "latest")安装最新版本。


南昌大学更新是否升级到最新的次要版本或主要版本?我不想升级到下一个主要版本,因为可能会破坏一些东西。 - Samson
2
@Samson:是的,ncu可以。如果你想使用主版本2的最新版本,请使用"moment": "<3" - Hoto Cocoa

-1
npx npm-check-updates -u
npm install

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接