老T博客

给博客更换主题 Hugo Bear

给博客更换主题 Hugo Bear

我很早之前就一直在用 Hugo theme Stack主题 写东西。这款主题挺好的,但我觉得它更适合图片比较多的博客。而我现在的网站上面已经积攒了1700多张照片,在Stack主题的处理下,生成网站时会多出 7000到8000个文件!这就导致整个网站的仓库体积特别大,想部署到第三方免费平台(比如Cloudflare Pages)就变得很困难。

现在的问题很明确:我得换一个更轻便的主场,最好主要面向纯文字的。于是我在Hugo主题网站上找来找去,最后选中了这款叫Bear(熊)的主题。下载下来一看,这主题确实轻量,总共才几十KB,改起来也很方便。它本身是没有任何CSS的,只有最基础的HTML结构。不过我在实际用的时候,发现还是需要加点CSS的,就又对这个主题“魔改”了一番。后来又发现其实官方主题库有多个 Bear 版本,其中 Bear Cub 就带了 CSS,于是又换成了这个。

迁移到这个新主题的过程中,最难搞定的问题是我原来Hugo项目的文件组织结构

我所有的内容,都是放在项目的content目录下面的。但这里边,我还分了两个文件夹:一个叫post,另一个叫posts(就是post加了个s)。之所以要分两个,最主要的原因是:文章数量实在太多了。如果都放在一个文件夹里,平常写东西或者整理的时候,很容易手滑把文件复制到错误的地方。我的策略是:把“已归档”的历史文章放在一个文件夹里(比如posts),然后新写的文章就放到另一个文件夹(比如post)。等post这个文件夹里的文章积累到一定数量了,我再手动把它们挪进posts文件夹去归档。这样用下来感觉就比较清晰可控,不容易出错。

另一个特点是,我原来的做法是:每篇博客文章的Markdown文件和它用到的图片都放在同一个文件夹里。比如写一篇叫《猫》的文章,那对应的路径可能是/content/posts/猫/,里面直接放着index.mdindex.en.md(因为我博客是双语的)和所有这篇用到的图片(比如cat1.jpg)。

这种方式其实我自己觉得是优点

  1. 本地写作超方便:要插图的时候直接粘贴进来就行,图片瞬间就存到文章的文件夹里了。
  2. 非常便于预览和管理:图片就在Markdown文件旁边,用任何支持本地图片的预览器都能直接显示。
  3. 几乎不会丢图片:路径相对简单且固定,文件和图总是捆在一起。

结果换主题就撞墙了!因为绝大多数流行的主题,都默认使用“文字和图片分离”的模式——Markdown文件放在content/...下面,而图片统一放在像static/images/这样的目录里。可能是为了仓库管理更清晰或者缓存优化吧?但我就是觉得我原来那种“图片同目录”的方式更顺手方便。所以这次换主题,最大的挑战就在于:怎么让我原有的这套“图片同目录”的文件结构,能完美兼容新主题的需求?

这个适配过程……那自然是反反复复测试了很多次。最后我选择的解决方案是:把我存放博客文章的核心文件夹(也就是content下面那些post/posts目录们)做成一个Git Submodule(子模块)

具体操作是:

  1. 我把存放所有文章内容的文件夹分离出来,形成了一个独立的Git仓库(我们姑且叫它“写作仓库”)。
  2. 然后我在主题仓库(无论是原来的Stack仓库还是新的Bear主题仓库)里,把这个独立的“写作仓库”作为Git Submodule引入。

这么做的好处是:

选择现在这种“双主题并存 + 内容子模块”的方案,除了技术适配的考量,还有一个很现实的原因:我现在的阿里云VPS快要到期了。目前博客主要还是托管在VPS上,相对来说比较稳定、速度也快。但长远考虑,我很可能会把整个网站完全托管到VercelCloudflare Pages这类平台上去。要把内容全部迁移过去,网站的体积就必须得尽可能精简优化。这次选择超级轻量的Bear主题,很大程度上也是为未来的这一步部署策略在做准备。

#博客 #hugo

评论