终于折腾出了一个还算满意的博客。
旧博客回顾
距离上次改造博客大概一年多一点,这是上次改博客时候发的文章。
当时的想法是在github托管,用github action 和 github pages实现完整流程。
技术栈基本就是纯hugo。但是用着愈发感觉臃肿,而且也不方便与像iA Writer
一样的编辑器集成。最后想了想还是改造吧。
需求分析
首先,我整理了我的需求,归纳为以下几点
- 能与
iA Writer
较好的兼容 - 能自动化部署/托管
- 能使用markdown格式“原生的”满足我的自定义需求
- 有充足的自定义空间
在这里我想先说说能使用markdown格式“原生的”满足我的自定义需求
到底是怎么个事儿。
何为**“能使用markdown格式“原生的”满足我的自定义需求”**
在博客编写中,我不免会遇到要用到markdown不支持的东西,诸如”tips”这种东西。而在hugo中,一般的实现方式是使用如下所示的shortcode
:
{{< notice "note" >}}xxxxxxx{{< /notice >}}
在markdown编辑器里写这种东西一是繁琐二是难看。在经历广泛调研后,我在obsidian中看到了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的主题编写,他给我最大的印象就是一大堆的大括号
{{ % 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这篇文章,他提供了完整的加密代码。或许可以把它做成一个插件。
总之,新博客算是搞定了,估计能用到读研/读博几年吧。