【问题标题】:Semver policy with Node.js engine enforcing执行 Node.js 引擎的 Semver 策略
【发布时间】:2021-05-22 18:17:38
【问题描述】:

强制执行更新的 (Node.js) 引擎版本时的政策是什么? 是 semver MAJOR 还是 semver MINOR

上下文:我是 package with 2k stars on github 的作者(每周下载 3 万次),我最近实施了 Node.js v14(因为我开始使用 可选链接 和 null 合并),并使其成为新的 MINOR 版本。

但我的一些用户抱怨并要求我将其更改为新的 MAJOR 版本。 以前,当我在 MINOR 版本上强制执行 Node.js v10 时,没有人抱怨。

我找不到任何关于这件事的资源,即使semver spec 没有指定这一点(甚至在常见问题解答部分中也没有)。该规范仅讨论 API。

我想让我的项目符合正确的政策。

【问题讨论】:

  • 我意识到这是一个见仁见智的问题,但几乎我使用过的每个模块都会增加 node.js 的要求,这会导致主要版本的增加。
  • 碰撞主要版本的一件事是npm update 命令不会自动更新主要版本碰撞;我或多或少地预计,如果npm update 可以更新内容,它(可能)不会引入重大的重大更改,例如最低节点版本。

标签: node.js semantic-versioning


【解决方案1】:

引用来自 Twitter (@izs) 的 Isaacs,semver npm 包的作者(顺便说一下 npm 的创始人):

我一直认为 SemVer Major 的意思是“您必须在您的终端进行一些更改才能开始使用此更新”。

如果以前的版本在平台版本 X 上工作,而新版本需要平台版本 X+n,那么符合条件,是的。

【讨论】:

  • 对我的推文稍微澄清一下:major 的意思是“我预计你必须改变你的最终才能使用这个更新”。差异是微妙的,但很重要。用户经常会依赖于程序的未指定、“工作但未按预期工作”、内部或只是简单的损坏方面。 (每个值得考虑的程序都有这些。)当一个错误被修复时,这些可能会改变,需要用户进行更改。但这些不是预期的或有意的;用户可能做错了,或者它可能是一个错误,或者它可能是一个开发人员有理由认为是 WONTFIX 的错误。
【解决方案2】:

这是discussed here in many threads 以及SemVer discusions。有人声称这是主观的,但我认为如果你用 OBV(对象版本化)之类的东西替换自以为是的术语(API、包、产品),你会看到规范和大多数知识渊博的参与者彼此同意。

如果您的客户的构建环境因您发布次要版本或补丁版本而损坏,他们完全有权投诉SemVer spec 确实更关注 API 版本控制,而不是包,尽管它确实在一些地方提到了后者。所以这里的关键是,我们大多数人实际上从不只对 API 进行版本控制,我们对包和其中的清单进行版本控制,它们也隐式/显式地包含传递依赖项。

SemVer 的全部意义在于向那些 OBV 的消费者传达风险。作为发布者,您对包含在 OBV 中的整个依赖关系树负责。您可以选择是隐式还是显式地将中断传递依赖项引入您的 OBV,因此您有责任通过升级主要版本来告知客户风险

【讨论】:

    猜你喜欢
    • 2019-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多