34. 关于 abbrlink 的一些见解

从我博客发布第一篇文章到现在,我一直用的都是 Hexo,也就是说,从 2023 年 06 月 16 日建立至今,我都一直没有怎么折腾过。

倒也不是说我对 NexT 十分满意,满意到用了三年也不会有任何想法。只是一直遵照着前辈的教诲:「不要轻易地在这种地方浪费时间」。

不过由于这段时间经历各种大大小小的事情,脑子里面总是能发散很多东西,包括不限于要不要买某物,要不要去哪玩,以至于到现在变成了要不要换个主题玩玩。

好吧,刚好这几天拿到了一些免费的 token,于是想着直接将这些 token 全部用掉免得觉得浪费。于是让 AI 全权代理整个仓库,让它自己在那里做各种迁移。

闲话少说,接下来说说遇到的问题。


一、abbrlink,我用了三年才觉得奇怪

在和 AI 大人协同工作的期间,它写了一个 Hexo 文章的兼容层,兼容以前的 Hexo,我当时就感觉奇怪,我明明用了 abbrlink 固定了链接,怎么还要兼容层。

问题给到 abbrlink。在我刚开始使用 Hexo 的时候,我就听说过这个插件,也还差不多记得当时说它是为了什么 —— 好像说是为了固定永久链接,防止死链。

我当时没怎么听懂这些东西,于是也照做了。总之,大家都提到的东西,我都安装了,大家都在用,我也要装一个吧。

不过现在回看,我感觉 abbrlink 有点奇怪。它会给每篇文章生成一个类似 30026 这样的短 ID 作为 URL,但这有必要吗?

先来说说我的命名习惯。我的文章源文件是按顺序排下去的:1.md2.md 这样,并且博客的文章标题前面也有一个序号。这样一条一条排列下去,哪篇文章在网站上看出问题了,回到电脑前也能很容易地找到对应文件去改。

这么看来,哪怕什么都不做,按照 Hexo 默认设置 permalink: :year/:month/:day/:title/,我的文章排列应该是 2026/01/01/1/ 这样子。如果只保留 permalink: :title/,情况更容易控制,1.md 就能直接生成 https://yuuu.org/1/,只能说,十分优雅(雾)。而现在的情况是我写了 permalink: post/:abbrlink.html,所以应该是按照 abbrlink 的参数写序号。

当时我的计算机知识和英语水平都很薄弱,做不到用英语命名文件,也不知道计算机已经(早就)能高效地搜索整个文件夹里的文本了。于是我才想了好一阵子,想出了这个方便的方法来让我人脑可以快速检索文件。至于 abbrlink,暂时看不出它在干什么。

现在看来,我当时已经构造了这么「优秀」的设计,其实 abbrlink 完全是不需要的。它解决的问题我根本就没有 —— 我有自己的编号系统,文章顺序一目了然,abbrlink 生成的那个乱码 ID 对我来说反而是多余的。但是直到今天我才发现这个问题。

现在,我的英语能力也能凭借着一边查词一边问 AI,慢慢地去看英语博客了。看多了之后,我发现他们大多数人的链接都是标题,或者比标题还简洁的关键词。这不失为一个还不错的选择。


二、等等,其他框架都没有 abbrlink?

于是我决定认真搞清楚这件事。

我在 Bing 搜索了 abbrlink,结果发现只有 hexo-abbrlink,没有其他框架会有类似的东西。这和我的想法吻合 —— 我印象中,WordPress 非常早就出现了自定义链接的方法,发布文章前必须写一个 slug,这早就是自带的设置了。

这就奇怪了。这么说来,Hexo 应该是有一段时间没有指定链接的方法,所以有人开发了这个插件来曲线救国?

于是我去看了一下当前的 Hexo 说明文档 Front-matter,里面居然有写:

设置描述默认值
permalink覆盖文章的永久链接,永久链接应该以 /.html 结尾null

奇怪了,我之前是不是没注意到?而且在永久链接(Permalinks)这一页也有具体的说明。

我以为往回翻到 2018 年的文档,肯定能发现那时候还没有这个字段 —— 结果翻开 Nov 27, 2018 的那次提交,它就清清楚楚地写在那里:

设置描述默认值
permalink覆盖文章网址

那一刻感觉有点荒谬。这个功能明明一直都在,大家却跑去装了一个插件来将活自己接过去干。

既然早就有了这个东西,我实在想不出来为什么要有 abbrlink。都来写博客这种麻烦事情了,自己手写一个 permalink 恐怕也不是什么无法忍受的事情,哪怕用机器翻译出来的英语,大概也要比那些无序的数字字母组合更容易理解吧。

于是我又去搜索了 hexo-abbrlink,看看 2015 年到 2018 年间大家都在说什么。

由于 hexo-abbrlink 是 2016 年 6 月 24 日才发布的,所以 2015 年什么都没有。然后我发现很多博客开始提到 abbrlink 是在 2018 年,2020 年往后教人做 Hexo 的文章大量提到了 abbrlink,重复性很高,大家来来去去也就是复述那些东西 —— 我很难判断他们是不是反复洗稿洗出来的千篇一律的内容(这里说的不是书写个人博客建站踩坑的那种,而是在 CSDN 和知乎这种地方经常会出现的复读文章)。大概也是这个时候,Hexo 是最流行的框架吧。

文章太多,我也没打算一篇篇去读。不过我在 Hexo 的 issue #1110 里找到了一些线索:恐怕在 Hexo 的某些版本中,permalink 的表现不太稳定,而且默认设置里处理中文字符就是简单转码。于是有人想着做了一个 abbrlink,又有人写了博文讲解遇到中文转码的链接可以用什么插件解决。这些最后都成为了后来洗稿文章的最初原料。


结论

abbrlink 的流行,不是因为它是最好的方案,而是因为最初有一批教程在传播,后来又被反复洗稿。当时的小白(包括我)照着装了,没有人告诉我们其实不需要,甚至 Hexo 文档里一直都有更直接的办法。

于是,当时同为小白的我,照着大家的教程将所有插件都装上,复制了很多人的配置文件,糅合出一份自己超级满意的配置,一直走到今天才发现问题。

既然问题发现了,那就在新博客再开始改吧。