如何在没有任何副作用的情况下更新 package-lock.json 中的单个依赖项?

Posted

技术标签:

【中文标题】如何在没有任何副作用的情况下更新 package-lock.json 中的单个依赖项?【英文标题】:How do I update a single dependency in package-lock.json, without any side effects? 【发布时间】:2019-04-06 15:27:39 【问题描述】:

我希望将我的应用程序中的以下 NPM (v5) 依赖项从版本 1.0.0 更新到 1.0.1,而不对我的 package.json 文件进行任何更改。

"dependencies": 
  "package": "~1.0.0"
,

我当前的 package-lock.json 文件将依赖项引用为版本 1.0.0,因此正如预期的那样,运行 npm install 会安装包的版本 1.0.0

问题在于运行npm install package@1.0.1npm update package 时,这两个命令似乎都会更改package.json 中的包版本引用方式

我可以运行一个命令来实现仅对 package-lock.json 文件的次要版本更新吗?

提前致谢!

【问题讨论】:

为什么要在不更新 package.json 的情况下这样做? @mihai 我们使用 tilda 字符来获取我们软件包的最新补丁版本。我认为我们没有理由需要更改在开发分支和发布分支之间引用包版本的方式。 【参考方案1】:

运行npm update <package>

这会将其更新为满足package.json 中指定要求的最新版本,并在package-lock.json 中反映更新。

【讨论】:

【参考方案2】:

package-lock.json 由 npm 生成,没有 npm 很难修改,因为它包含包哈希。

如果您仅使用补丁版本 (~1.0.0) 引用模块,我认为执行以下操作是安全的:

备份package.json并删除 运行npm update package。这将使用package-lock.json 作为参考,还将更新package-lock.json 恢复package.json 现在运行 npm update package 将不会更新 package.json,因为 package-lock.json 是较新的版本

如果您正在寻找单行命令:

mv package.json package.json.tmp && npm update package && mv package.json.tmp package.json

同样,只有在处理补丁版本 (~1.0.0) 时才能安全地执行此操作。如果您指定次要 (^1.0.0) 或主要 (1.0.0) 版本,您可能需要直接更新 package.json

【讨论】:

以上是关于如何在没有任何副作用的情况下更新 package-lock.json 中的单个依赖项?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在不安装包的情况下按字母顺序排列 package.json?

如何在没有任何错误的情况下更新 navigator.devicemedia 上的数据

在没有 Packager 的情况下运行 React Native iOS

如何在 ReactJS 中没有任何给定事件的情况下更新 UI [重复]

如何在没有 MANIFEST.in 文件的情况下包含 package_data?

如何在没有 grunt 或 gulp 的情况下将 typescript 编译器作为 package.json 脚本运行