更新依赖项是否会破坏向后兼容性(semver 主要版本更改)?
Does updating dependencies break backwards compatibility (semver major version change)?
假设我发布了一个新库 Foo v1.0.0
,它需要 php 5.6 作为依赖项。
现在我想在一些方法实现中内部使用 php 7.0 中的一些较新的语言结构。但是,我的整个publicAPI(方法名,参数,returns等)保持不变
在semver之后,我现在应该发布什么版本号?
在我看来,要求新的主要平台依赖项将破坏现有用户的向后兼容性 运行 php 5.6,他们将无法简单地使用 composer update
进行升级,所以它现在应该是 v2.0.0
。另一方面,因为我暴露的 API 没有任何变化,我觉得这应该只是一个补丁 v1.0.1
不,你弄错了 backward compatibility
的意思。如果您的库的 API 保持不变,那么它可能只是新的主要版本,但它仍然向后兼容,这意味着升级不需要更改使用您的库的代码。要求 PHP 7 只是要求,但它与兼容性无关。
我看到的其他项目通常会出现重大的数字颠簸,但这主要是因为它们不仅更改了需求,而且还做了一些更改以从中受益,即新的 PHP 功能。因此,问问自己是否真的会从仅要求 PHP 7 中获益,或者这将是一种外观更改或代码清理。它还取决于您的更改会真正影响多少用户。
编辑
要求 PHP 7 有时是一个巨大的变化,因为许多人仍在 5.x 并且不想或不能升级,虽然这不是向后兼容性问题,但我应该 2.0.0
清楚地表明这一变化是主要的。
假设我发布了一个新库 Foo v1.0.0
,它需要 php 5.6 作为依赖项。
现在我想在一些方法实现中内部使用 php 7.0 中的一些较新的语言结构。但是,我的整个publicAPI(方法名,参数,returns等)保持不变
在semver之后,我现在应该发布什么版本号?
在我看来,要求新的主要平台依赖项将破坏现有用户的向后兼容性 运行 php 5.6,他们将无法简单地使用 composer update
进行升级,所以它现在应该是 v2.0.0
。另一方面,因为我暴露的 API 没有任何变化,我觉得这应该只是一个补丁 v1.0.1
不,你弄错了 backward compatibility
的意思。如果您的库的 API 保持不变,那么它可能只是新的主要版本,但它仍然向后兼容,这意味着升级不需要更改使用您的库的代码。要求 PHP 7 只是要求,但它与兼容性无关。
我看到的其他项目通常会出现重大的数字颠簸,但这主要是因为它们不仅更改了需求,而且还做了一些更改以从中受益,即新的 PHP 功能。因此,问问自己是否真的会从仅要求 PHP 7 中获益,或者这将是一种外观更改或代码清理。它还取决于您的更改会真正影响多少用户。
编辑
要求 PHP 7 有时是一个巨大的变化,因为许多人仍在 5.x 并且不想或不能升级,虽然这不是向后兼容性问题,但我应该 2.0.0
清楚地表明这一变化是主要的。