跳过正文
  1. 文章/

博客重启:沉寂一年后的主题升级记录

·1421 字·3 分钟
目录

距离上次更新博客,已经过去了一年多。

趁着最近重新拾起写作的念头,我顺手检查了一下博客的技术状态——结果发现积累的问题比预想的要多。这篇文章就记录一下这次升级的过程和踩到的坑。

检查出了哪些问题
#

博客用的是 Hugo + Blowfish 的组合。一年多没动,Hugo 和主题都更新了不少版本,配置文件也出现了一些历史遗留问题。

主要发现了以下几类问题:

版本严重滞后

项目当时版本最新版本
Blowfish 主题v2.89.1v2.98.0
Hugo(Vercel 部署)0.140.00.156.0

更严重的是,Blowfish v2.89.1 之后的版本将 Hugo 最低要求提升到了 0.141.0,而 Vercel 上部署的版本恰好是 0.140.0,意味着每次部署都会触发版本警告,甚至出现功能缺失。

已编译的 CSS 缺失

Blowfish 主题使用 Tailwind CSS v4 构建样式,需要在本地执行 npm 编译后将生成的 assets/css/compiled/main.css 提交到仓库。由于一年多没有更新,这个编译步骤一直没有执行,仓库里这个文件是空的。好在 Vercel 部署不依赖这个文件重新编译(它只运行 Hugo),所以线上样式一直正常——但只要主题升级,这个文件就必须重新生成。

过时的自定义 partial

为了调整文章卡片和元数据的显示,我之前从主题复制了几个 partial 并做了微调。这一年多,主题对这些文件做了相当大的改动,我的版本早已过时:

  • layouts/partials/article-link/card.html:主题完全重写了图片处理逻辑
  • layouts/partials/article-meta/basic.html:修复了 showDateOnlyInArticle 的判断逻辑
  • layouts/partials/footer.html:移除了旧版 Hugo resource pipeline 写法(resources.Fingerprint),新版 Hugo 下这段代码会直接报错导致构建失败

其他小问题

  • categories frontmatter 写成了字符串而非数组(Hugo 期望是数组)
  • 一篇测试文章 test.mddraft = false,一直处于公开状态
  • 版权年份还停在 2024

升级过程
#

1. 更新 Blowfish 主题
#

主题通过 git submodule 管理,直接切换到 v2.98.0 tag:

cd themes/blowfish
git fetch --tags
git checkout v2.98.0

v2.89.1 到 v2.98.0 跨越了 639 个提交,9 个大版本。主要新增功能包括:

  • 面包屑导航结构化支持enableStructuredBreadcrumbs
  • 远程封面图 hotlink 控制hotlinkFeatureImage
  • TOC bug 修复和多处 RTL 方向适配改进
  • Tailwind CSS 升级到 ^4.1.18

2. 重新编译 Tailwind CSS
#

主题升级后必须重新编译 CSS,否则新版主题的样式类不会生效:

cd themes/blowfish
npm install
cd ../..
./themes/blowfish/node_modules/.bin/tailwindcss \
  -c ./themes/blowfish/tailwind.config.js \
  -i ./themes/blowfish/assets/css/main.css \
  -o ./assets/css/compiled/main.css

编译完成后生成了 139KB 的 CSS 文件,提交到仓库。

3. 清理过时的自定义 partial
#

对比了三个自定义 partial 与主题新版的差异,发现当初的改动实际上都很小,而主题的更新量很大。决定全部放弃自定义版本,直接使用主题最新版本。

删除 card.htmlbasic.html,用主题新版的 footer.html 覆盖本地版本。

4. 更新配置
#

vercel.json 中的 Hugo 版本从 0.140.0 升至 0.156.0module.toml 中将 extended = false 改为 true 并更新最低版本要求。params.toml 中添加了两个新参数。

5. 清理历史遗留问题
#

修复了两篇文章中 categories 字段的类型(字符串改为数组),将测试文章设为草稿,更新版权年份。

构建结果
#

本地执行 hugo build,输出:

Total in 137 ms

36 个页面,无任何错误。只剩一条可以忽略的警告——主题声明的 max = "0.155.3" 比本地 Hugo 0.156.0 低一个小版本,等主题下次发布时会自动消失。

总结
#

这次升级的核心教训是:不要让依赖长时间不更新。如果当初每隔一两个月小幅跟进,每次的改动量会很小,也不会积累这么多自定义 partial 与主题的分叉问题。

另外,自定义主题的 partial 要保持克制——改动越多,跟进上游更新的成本就越高。如果改动很小,有时候不如直接不覆盖,等主题本身支持了再说。

博客重新上线了,希望这次能坚持更新。

RustyPiano
作者
RustyPiano
欢迎来到 RustyPiano 的空间!我是一个热爱技术的开发者,喜欢折腾各种技术。在这里,你将看到我的学习笔记、技术分享以及生活中的点滴记录。

相关文章