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

Updating dependency version that doesn't change anything in your package

假设您有一个依赖包 Bar 的包 Foo

最初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 仅在 1.0.0 需要 Bar,则会发生冲突。据我所知,这是 PHP Composer 中的行为。

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

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

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

你包的publicAPI一点都没变。或者至少不应该。如果您正确封装了依赖项,则包的内部结构与包消费者无关。

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

我会很好地将 Foo 提高到 1.0.1,以使依赖声明中的更改明确,但除此之外别无他法。 (此外,1.0.0 的用户和 1.0.1 的用户将有效地安装不同的库;因此根本不更改版本号会产生误导,IMO;并且不更改版本将不允许包消费者获取带有更新的版本 Bar,如果他们需要的话)。

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