npm update 根据 package.json 中的版本范围(如 ^1.2.3)将 node_modules 和 package-lock.json 中的依赖升级至最新兼容版本,但不修改 package.json 中的版本号;升级单个包(如 lodash)或全部直接依赖均遵循此规则,且不更新未显式声明的间接依赖。

npm update 会根据 package.json 中定义的版本范围(如 ^1.2.3 或 ~1.2.3),把已安装在 node_modules 和 package-lock.json 中的依赖升级到符合要求的**最新兼容版本**,但不会改变 package.json 里的版本号。
升级单个依赖
只更新某个包(及其子依赖)到满足当前版本范围的最新版:
npm update lodash执行后,lodash 在 node_modules 和 package-lock.json 中会被更新,但 package.json 中的版本字段保持不变。
升级所有直接依赖
不加参数运行,会检查并更新 package.json 中所有 dependencies 和 devDependencies 所列包(只要它们有符合语义化版本规则的更新):
注意:它不会升级被其他包作为子依赖引入的间接依赖(transitive dependencies),除非这些子依赖也出现在你的 package.json 中,或其父包本身被更新从而触发重解析。
强制更新并写入 package.json
npm update 默认不修改 package.json。如果想让 package.json 中的版本号也同步更新(比如从 ^1.2.0 升到 ^1.3.0),需要配合 --save(旧版 npm)或更推荐的方式:
- 用
npm install <pkg>@latest --save-dev</pkg>更新开发依赖并写入 - 用
npm install <pkg>@latest --save</pkg>更新生产依赖并写入(npm 5+ 可省略--save) - 或者使用
npx npm-check-updates -u && npm install(需先全局安装npm-check-updates)来批量更新package.json中的版本号
常见注意事项
- 确保
package.json中的版本字段用了允许升级的范围(如^、~),写死版本(如"1.2.3")将导致npm update无效果 - 更新后建议运行测试,因为即使小版本升级也可能引入不兼容变更(尤其非严格遵循 SemVer 的包)
-
package-lock.json一定会被重新生成以反映实际安装的版本,这是保证可重现安装的关键
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











