开源巨变:Anthony Fu引领前端版本控制新时代

大家好,我是农村程序员,独立开发者,行业观察员,前端之虎陈随易。

如果本文能给你提供启发或帮助,欢迎动动小手指,一键三连 (点赞、评论、转发),给我一些支持和鼓励,谢谢。


前端界的轮子大师,Anthony Fu 又做了件大事 时代语义版本控制

什么意思呢?下面是文章第一段翻译后的原话:

如果您一直在关注我在开源方面的工作,您可能已经注意到我倾向于坚持使用零主要版本控制,例如 v0.xx

例如,在撰写本文时,UnoCSS 的最新版本是 v0.65.3Slidevv0.50.0unplugin-vue-componentsv0.28.0

其他项目,例如 React Nativev0.76.5,sharp 是 v0.33.5,也遵循这种模式。

人们通常认为零主要版本表明该软件尚未准备好投入生产。

然而,这里提到的所有项目都非常稳定并且可以投入生产,已被数百万个项目使用。

文章很长,有时间的可以去读读原文 antfu.me/posts/epoch...

一句话总结就是:

目前的 语义版本控制 有问题,我们需要新的 时代语义版本控制

那么目前的 语义版本控制 有什么问题呢?

先简单了解一下基本概念,语义版本控制 版本号由三部分组成:MAJOR.MINOR.PATCH

  • MAJOR:当您进行不兼容的 API 更改时递增。
  • MINOR:当您以向后兼容的方式添加功能时递增。
  • PATCH:当您进行向后兼容的错误修复时增加。

比如 v1.2.31 是主版本,2 是次要版本,3 是修订版本。

以下原文:

然而,人类以对数字尺度的感知。

我们倾向于将 v2.0v3.0 视为一个巨大的、突破性的变化,而 v125.0v126.0 则显得微不足道,尽管两者都表明 语义版本控制 中的 API 变化不兼容。

这种看法可能会让维护者犹豫是否要针对较小的重大更改升级主要版本,从而导致在单个主要版本中累积许多重大更改,从而使用户升级变得更加困难。

相反,对于像 v125.0 这样的东西,很难传达重大变化的重要性,因为跳转到 v126.0 看起来很小。

就是说,由于人类感知的问题,很多时候很难管理好,到底哪些更新放在哪个版本,导致小更新里面也混入了破坏式改动等问题。

以下原文:

在理想的情况下,我希望 语义版本控制 有 4 个数字:EPOCH.MAJOR.MINOR.PATCH

EPOCH 版本用于那些重大公告,而 MAJOR 则用于可能并不重要的技术不兼容的 API 更改。

这样,我们就可以采用更精细的方式来传达变更。

类似地,我们也有浪漫版本控制,建议 HUMAN.MAJOR.MINOR

但是,当然,对于整个生态系统来说,采用新的版本控制方案已经太晚了。

如果我们不能改变 SemVer(语义版本控制),也许我们至少可以扩展它。

我提出了一种新的版本控制方案,称为 Epoch Semantic Versioning,简称 Epoch SemVer,中文名称 时代语义版本控制

它建立在 MAJOR.MINOR.PATCH 结构之上,将第一个数字扩展为 EPOCHMAJOR 的组合。

为了区分它们,我们使用第三个数字来表示 EPOCH,它给出了 MAJOR 范围从 0 到 99。

这样,它遵循与 SemVer 完全相同的规则,不需要任何现有工具进行更改,但提供了更精细的信息给用户。

格式如下:

  • EPOCH:当您进行重大或突破性更改时增加。
  • MAJOR:当您进行较小的不兼容 API 更改时递增。
  • MINOR:当您以向后兼容的方式添加功能时递增。
  • PATCH:当您进行向后兼容的错误修复时增加。

例如,UnoCSS 将从 v0.65.3 过渡到 v65.3.0 (在 EPOCH 为 0 情况下)。

SemVer 之后,补丁版本将成为 v65.3.1,功能版本将成为 v65.4.0

如果我们引入了一些影响边缘情况的微小不兼容更改,我们可以将其升级到 v66.0.0 以提醒用户潜在的影响。

如果对核心进行重大修改,我们可以直接跳转到 v100.0.0 以标志着新时代的到来并发布重大公告。

我建议为每个非零 EPOCH 分配一个代码名称,以使其更容易记住且更易于引用。

这种方法为维护人员提供了更大的灵活性,可以有效地向用户传达更改的规模。

看懂了没有?说实话,我看了几遍都没搞清楚这个版本怎么理解。

不过在我的仔细推敲下,我的理解是这样的:

一共 4 个版本号,从左往右,第一个和第二个融合为一个,叫做 EPOCH * 100 + MAJOR,第三个和第四个跟以前的含义不变。

所以,时代语义版本 依旧是 x.x.x 三段式结构。

那么,当有向后 不兼容变更 的时候,由于不是非常重大的变更,很多维护者并不想升级大版,而是把这种不兼容性放到第二个数字中。

从而导致我们明明只是升级一个小版本,但运行却报错的问题。

所以,关于这个 不兼容变更Anthony Fu 建议分成 2 个数字来控制,分别是 EPOCHMAJOR

默认情况下,EPOCH=0,那么 时代语义版本 跟原本的 语义版本 没有任何区别。

当你有较小的 不兼容变更 的时候,那就放心大胆地增加 MAJOR 版本,比如从 v1.0.0 升级到 v2.0.0

当你有 较大的颠覆性的重大的吓死人的 不兼容变更的时候,那就增加一次 EPOCH 版本。

比如现在的版本是 v2.5.6,按照 EPOCH * 100 + MAJOR 这个公式来说,此时 EPOCH=0,因为 0 * 100 + 2 = 2

那么当有重大的,吓死人的更新的时候,第一个 吓死人EPOCH 版本号就是 EPOCH=1,代入公式得到第一个数字是 1 * 100 + 0 = 100

整个完整版本号就是 v100.0.0,继续更新,修订版本就是 v100.0.1、次要版本就是 v100.1.0,主要版本就是 v101.0.0 等等。

我们给每个 吓死人 的版本取个外号,比如叫做 死神

那么下一个 吓死人 的版本是多少呢?就是 v200.0.0,外号叫做 如来

每个重大更新,都有一个外号,这样更容易识别和记住不同的重大版本,让我们对版本的控制和印象,更加深刻。

这样一来,v100v200 的升级,是不是比 v125v126 的区别大多了,肉眼一看就知道是重大版本升级,维护者也可以更加放心大胆地更新 MAJOR 版本。

不得不说,不愧是 Anthony Fu,如此绝妙的想法,真是一个字:

就在昨天,slidev 已经从 v0.51.0 升级到 v51.0.0taze 已经从 v0.18.1 升级到 v18.1.0ni 已经从 v0.23.2 升级到 v23.2.0 等等。

真是 知行合一 的典范啊!

Anthony Fu,前端永远的神,整个前端发展史,都有他浓墨重彩的一笔。

相关推荐
雨 子21 分钟前
Spring Web MVC
前端·spring boot·spring·mvc·postman
雨 子23 分钟前
SpringBoot环境和Maven配置
java·spring boot·后端·java-ee·maven
zyplanke23 分钟前
Spring配置文件中:密码明文改为密文处理方式(通用方法)
java·后端·spring
计算机毕设指导627 分钟前
基于Springboot的景区民宿预约系统【附源码】
java·开发语言·spring boot·后端·mysql·spring·intellij idea
计算机毕设指导630 分钟前
基于Springboot美食推荐商城系统【附源码】
java·前端·spring boot·后端·spring·tomcat·美食
!win !33 分钟前
外部H5唤起常用小程序链接规则整理
前端·小程序
染指悲剧1 小时前
vue实现虚拟列表滚动
前端·javascript·vue.js
云端 架构师1 小时前
Lua语言的语法
开发语言·后端·golang
AI向前看1 小时前
Objective-C语言的网络编程
开发语言·后端·golang
林涧泣1 小时前
【Uniapp-Vue3】navigator路由与页面跳转
前端·vue.js·uni-app