在JavaScript中的嵌套对象上执行Semver,主要、次要或修补程序

Semver on nested object in JavaScript, major, minor or patch?

本文关键字:主要 程序 修补 Semver JavaScript 嵌套 对象 执行      更新时间:2023-09-26

我以为我对语义版本控制很了解,但这一变化让我不确定预期的版本变化是什么:

原始代码:

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属性的内容,现在这是一个不同的字符串

有一次,当我使用的一个库没有像我期望的那样符合semver时,我真的很生气。我不想那样对别人。

我意识到这可能被视为一个主观/基于观点的问题,但我正在寻找"正确"的答案(如果可能的话,提供证据)。最安全的选择显然是选择major,但我想看看这是否有些过头了。

Patch

当你这样做的时候,你是否必须改变你的任何测试,以适应这种变化?我怀疑不是。如果你不依赖这种消息格式,那么你的消费者依赖它的可能性有多大?

我认为这取决于上下文-有没有一种方法可以在不进行字符串操作的情况下获得错误消息中包含的信息?如果是这样的话,我想说改变它并不是一个突破性的改变——你不应该为了支持以不受支持的方式使用API的代码而竭尽全力。

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