在 JavaScript,主要,次要或补丁中嵌套对象上的 Semver?
Posted
技术标签:
【中文标题】在 JavaScript,主要,次要或补丁中嵌套对象上的 Semver?【英文标题】:Semver on nested object in JavaScript, major, minor or patch? 【发布时间】: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 的一部分依赖。这使它成为一个补丁更改 【参考方案1】:Patch
在执行此操作时,您是否必须更改任何测试以适应更改?我怀疑不是。如果您不依赖这种消息格式,那么您的消费者依赖它的机会有多大?
【讨论】:
我最后去了补丁。错误消息未记录在案,因此不应依赖。【参考方案2】:我认为这取决于上下文 - 有没有一种方法可以在不进行字符串操作的情况下获取错误消息中包含的信息?如果是这样,我会说更改它不是一项重大更改 - 您不必向后弯腰来支持以不受支持的方式使用 API 的代码。
另一方面,如果没有其他方法可以获取该信息,那么这就是您的 API 的问题。在这种情况下,我建议在错误对象上推送带有新消息和方法/属性的主要版本,以获取该信息 - 这将避免破坏人们的代码,并确保您不必再次处理此问题,如果您想更改错误消息。
【讨论】:
以上是关于在 JavaScript,主要,次要或补丁中嵌套对象上的 Semver?的主要内容,如果未能解决你的问题,请参考以下文章
在 Octopus Deploy 中,第一次将主要或次要版本部署到环境时如何要求批准?