【发布时间】:2016-11-20 19:52:35
【问题描述】:
我以为我对 Semantic Versioning 很了解,但这一变化让我不确定预期的版本变化是什么:
原代码:
if (result.error) {
return callback(result.error);
}
新代码:
if (result.error) {
result.error.message = `${result.error.message} on ${self.tableName()}`;
return callback(result.error);
}
我认为此更改可以归类为 patch、minor 或 major 更改。三种场景:
-
patch:回调仍在接收Error对象。Error对象仍然具有message属性,并且该属性仍然是String。 -
minor:消费者可能依赖message属性的内容,寻找字符串的一部分。这种变化只是在字符串的末尾增加了更多,因此只是附加的。 -
major:消费者可能依赖于message属性的内容,现在这是一个不同的字符串
当我使用的库不符合我的预期时,我真的很生气。我不想对别人那样做。
我意识到这可能被视为一个基于主观/意见的问题,但我正在寻找“正确”的答案(如果可能,请提供证据)。最安全的选择显然是选择major,但我想看看这是否矫枉过正。
【问题讨论】:
-
因为您不知道您的用户如何使用该消息,所以这是一个重大更改。
-
@AdrianLynch 那么每一个变化都是一个重大变化。
-
当然不是。如果我添加一个新方法,这不是一个重大变化。如果我为方法添加额外的参数,这不是一个重大更改。如果我返回与以前不同的东西,这可能是一个重大变化。
-
@Clarkie - 为什么不直接升级主要版本?这样做有什么问题?
-
@AdrianLynch 我想这样做的不利方面是它会促使消费者不得不深入了解发生了什么变化。大多数人会自动更新次要和补丁版本,但不会自动更新主要版本。我认为使用补丁的最佳解释是,如果没有记录错误消息字符串,则不应将其作为 api 的一部分依赖。这使它成为一个补丁更改
标签: javascript versioning semantic-versioning