软件包主要版本更改是否意味着子软件包主要版本更改?

时间:2019-12-09 11:25:41

标签: php composer-php semantic-versioning

假设我有一个核心CMS,它已从v4.8.7升级到v5.0.0

我还有一个事件模块程序包,它具有自己的版本号1.2.4,它将此核心CMS程序包导入到其composer.json文件中:

    "company-name/cms": "^4.3",

我将这个软件包上的composer.json文件升级为:

    "company-name/cms": "^5.0",

但是我该如何用语义版本标记来标记此更改?

应该将其标记为重大更改,从而意味着子模块版本号将变为2.0.0,还是应将其标记为次要/补丁?

我认为这将需要标记为一项重大更改,否则如果父包已过期但只想收集意见,则在使用该包的项目上运行composer update可能会导致错误。 / p>

1 个答案:

答案 0 :(得分:0)

从纯粹的SemVer角度来看,这实际上取决于工具链的功能和约定以及打破传递性依赖项中的更改的类型。

某些工具链会阻止包含中断传递依赖项的不中断更新,发出警告,并且不会中断客户的获取和构建过程,如果;他们可以跳过不间断的更新来完成构建的依赖关系图。其他人将抛出错误,并阻止构建完成。

构建中断不是唯一的传递依赖项问题。如果引入传递性行为(该行为会修改组件的有效功能),以致客户代码在运行时会中断,则会造成痛苦。当然,对于防止这种更新发生的工具链来说,这并不是问题。

将自己放在客户的鞋子上,考虑一下他们可能用来摄取包装的工具链。您愿意给他们带来多少痛苦?