··

终于,一个不错的博客

终于折腾出了一个还算满意的博客。

旧博客回顾

距离上次改造博客大概一年多一点,这是上次改博客时候发的文章

202506101835487

当时的想法是在github托管,用github action 和 github pages实现完整流程。 技术栈基本就是纯hugo。但是用着愈发感觉臃肿,而且也不方便与像iA Writer一样的编辑器集成。最后想了想还是改造吧。

需求分析

首先,我整理了我的需求,归纳为以下几点

  1. 能与iA Writer较好的兼容
  2. 能自动化部署/托管
  3. 能使用markdown格式“原生的”满足我的自定义需求
  4. 有充足的自定义空间

在这里我想先说说能使用markdown格式“原生的”满足我的自定义需求到底是怎么个事儿。

何为**“能使用markdown格式“原生的”满足我的自定义需求”**

在博客编写中,我不免会遇到要用到markdown不支持的东西,诸如”tips”这种东西。而在hugo中,一般的实现方式是使用如下所示的shortcode:

{{< notice "note" >}}
xxxxxxx
{{< /notice >}}

在markdown编辑器里写这种东西一是繁琐二是难看。在经历广泛调研后,我在obsidian中看到了callout,他能非常好的满足我的大部分需求。

callout用法参考
> [!tips]
>
> xxxxxxxx

根据我的需求,我整理出了两套方案:

  • wordpress+iA writer+NAS
  • 静态博客框架+callout插件+Github Pages

值得一提的是,有些callout不能解决的部分,除了类似mdx的东西也基本不能方便的在iA writer中编写,而astro对mdx有较好的支持,所以我最后选择了它。

Astro介绍

实际动手了,才发现迁移到astro非常方便,他也和hexo、hugo类似,都是一堆配置+markdown文章。他的核心优势在我看来是框架结构更加现代化,而且使用nodejs/ts更加契合用户群体。不过由于我对于前端只是处于“会用”的水平,所以我打算更着重聊聊我的个人体验而不是诸如“群岛架构”、“UI无关”、“服务器优先“这些技术优势。

轻松迁移

首先我想说的就是它可以轻松迁移。如果你之前使用的是hexo、hugo这种,你要做的只是把markdown复制粘贴过来,然后动手处理你的各种乱七八糟的shortcode就行了。当然,如果的slug是定制的,或许需要稍微修改下metadata。

而对于各种乱七八糟的shortcode,幸运的是他们都遵守一定的pattern,所以你也可以将pattern喂给GPT,让他写一个正则表达式(原谅我死活写不明白VSCode的正则)在VSCode里批量替换。反正对于我,我几乎没花时间在文章迁移上。

更易上手的定制流程

这次我是在miniblog的基础上自己写了陈的博客这一主题。小巧、轻量,而且能支持我需要的所有功能。除了对于iA Writer这种双链式编辑器里的一堆markdown文件无法直接支持以为,我没找到任何的缺点。

Astro vs Hugo

之前我也进行过hugo的主题编写,他给我最大的印象就是一大堆的大括号

hugo主题模板
{{ % if xxx %}}
{{xxx.data.text}} xxxx
{{ % endif % }}
{{ % for item in xxx % }}
<a href={{item.slug}}> {{item.title}} </a>
{{ % endfor % }}

诸如此类的东西写的我头痛欲裂,而astro就能轻松的用vue、react这种框架配上tailwind css来愉快的编写,这让我效率倍增。从决定使用astro框架到我的主题写完初版博客上线,只花了一个下午+一个晚上。

齐全的插件与文档

这个绝对是加分项,超大的加分项,astro有非常详细的文档!大概花了半个小时我就已经对他的架构有比较深入的了解了。而且因为他能原生vue、react这种前端框架,这使得各种前端插件的获取也变得格外容易(虽然我一个没用就是了)。

其他需求

当然,还有些需求是astro无法实现的,对于我,就只有以下这一点

文章加密功能

Astro有提供登录验证的功能,但是与“文章加密”功能还是有点不同,为了实现此功能,我参考了How To Blog 02: Astro❤️Password这篇文章,他提供了完整的加密代码。或许可以把它做成一个插件。

总之,新博客算是搞定了,估计能用到读研/读博几年吧。