更新不会改变包中任何内容的依赖版本

Posted

技术标签:

【中文标题】更新不会改变包中任何内容的依赖版本【英文标题】:Updating dependency version that doesn't change anything in your package 【发布时间】:2020-09-05 02:07:20 【问题描述】:

假设你有一个包Foo,它依赖于包Bar

最初Foo v1.0.0 依赖于Bar v1.0.0

Bar 更新为v2.0.0

您现在更新了Foo 的依赖项,因此它现在需要Bar v2.0.0

由于Bar 的此次升级不会破坏、添加或修复Foo 中的任何功能,您应该更新Foo 语义版本控制的哪个部分以反映这一变化?


注意:如果您想知道为什么我必须将 Bar 更新为 v2.0.0 如果它不会更改 Foo 中的任何内容 - 如果您的应用程序中的其他包也需要 Bar 但是在v2.0.0,如果Foo 只需要Bar1.0.0,它将发生冲突。 AFAIK 这是 php Composer 中的行为。

【问题讨论】:

为什么不要求 Bar 使用 ^1.0 @NicoHaase 抱歉,我的意思是 Bar 需要进行重大更改 2.0.0。为清晰起见更新了详细信息。 如果Foo 能够同时使用Bar 的v1 和v2,你可以同时使用^1.0|^2.0——这就是Symfony 构建他们的需求的方式 @NicoHaase 我不知道管道,会尝试。因此,如果我将Foo 设置为使用^1.0|^2.0,我猜同样的问题适用,Foo 现在的semver 是什么? 此问题是否对Foo 造成重大更改?如果没有,从我的角度来看,没有必要发布新的主要版本。我认为这个问题没有全球范围内的真实答案 【参考方案1】:

除非您的包是为提供包Foo 而构建的元包,否则从技术上讲,它不需要更改版本。

如果您使用version ranges 声明您的依赖项(因为从您的包的角度来看,您可以独立地依赖任何版本),所以它变成:

"foo/foo": "^1.0 || ^2.0"

你的包的公共 API 完全没有改变。或者至少不应该。如果您正确封装了依赖项,则包的内部不是包消费者的业务。

您没有添加或更改功能,也没有破坏向后兼容性。最多只是一个重新声明依赖的补丁,仅此而已。

我可以将Foo 更改为1.0.1,以明确更改依赖声明,但仅此而已。 (此外,1.0.0 的用户和1.0.1 的用户将有效地安装不同的库;因此,IMO 根本不更改版本号会产生误导;并且不更改版本将不允许软件包消费者获取版本更新Bar,如果他们需要的话)。

不过,这是一个受到相当程度意见影响的问题。例如,您可能想阅读this lengthy discussion。

【讨论】:

以上是关于更新不会改变包中任何内容的依赖版本的主要内容,如果未能解决你的问题,请参考以下文章

在 npm 包中,依赖版本的空字符串 ("") 是啥意思?

Android,当我更新我的图像时,为啥启动器图标和其他图像永远不会改变?

在 Yarn Workspace 的不同包中使用不同版本的依赖项

发布更新的移动应用程序版本

Composer 不会更新过时的依赖项

jar包中的依赖jar版本冲突