在JavaScript,major,minor或patch中嵌套对象的Semver?

时间:2016-07-18 09:12:28

标签: javascript versioning semantic-versioning

我认为我在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);
}

我认为此更改可以归类为patchminormajor更改。这三种情况:

  1. patch:回调仍在接收Error个对象。 Error对象仍具有message属性,该属性仍为String
  2. minor:消费者可能依赖message属性的内容,寻找字符串的一部分。这种变化只会增加字符串的末尾,因此只是加法。
  3. major:消费者可能依赖message属性的内容,现在这是一个不同的字符串
  4. 当我使用的图书馆没有像我期待的那样符合semver时,我真的很生气。我不想对其他人这样做。

    我意识到这可以被视为一个基于主观/意见的问题,但我正在寻找“正确的”#39;回答(如有可能,有证据)。最安全的选择显然是major,但我希望看看这是否过度。

2 个答案:

答案 0 :(得分:3)

Patch

为了适应这种变化,您是否必须在执行此操作时更改任何测试?我怀疑不是。如果您不依赖于此消息格式,那么您的消费者有哪些机会依赖它?

答案 1 :(得分:0)

我认为这取决于上下文 - 有没有一种方法可以在没有字符串操作的情况下获取错误消息中包含的信息?如果是这样,我说改变它并不是一个重大变化 - 您不应该向后弯腰以支持以不受支持的方式使用API​​的代码。

另一方面,如果没有其他方式获取该信息,那么这就是您的API的问题。在这种情况下,我建议在错误对象上使用新消息和方法/属性推送主要版本以获取该信息 - 这样可以避免破坏人们的代码,并确保您不会如果要更改错误消息,则必须再次处理此问题。