博客三次重构:Hugo、Astro到Hexo

博客三次重构:Hugo、Astro到Hexo
陈鑫宇博客是静态站:Markdown写作,内容推送到仓库,GitHub Pages出站。
文章格式一直是Markdown加front-matter,三次迁移换的都是主题。下面是三次用过的引擎、目录结构和配置。
| Hugo | Astro | Hexo | |
|---|---|---|---|
| 语言 | Go | Node | Node |
| 安装 | 单二进制 | npm | npm |
| 站点配置 | config.yml | astro.config.mjs | _config.yml |
| 输出目录 | public | dist | public |
| 主题索引 | themes.gohugo.io | astro.build/themes | hexo.io/themes |
第一版:Hugo
Hugo用Go编写,安装是一个二进制文件,放进PATH即可使用,不需要Node环境。全站一个配置文件,文章按目录组织,主题放在themes目录(直接放或用git submodule管理)。front-matter支持TOML、YAML、JSON三种格式。当时用的版本是0.165.0。本地预览是hugo server,生成是hugo,输出在public目录。
1 | content/ |
主题是PaperMod,自带排版、深色模式、目录(TOC)、代码高亮和搜索。星空背景、鼠标点击特效、访问统计不在主题里,需要自己写CSS和JS挂在主题外面。这几个效果要维护的代码量接近主题本身。所以换掉了。
第二版:Astro
Astro属于Node生态,用npm装依赖,配置文件是astro.config.mjs,构建输出到dist目录。
1 | src/ |
内容集合是它的一个机制:文章的front-matter字段在TypeScript文件里定义,不符合schema的字段会在构建时报错。输出默认不含前端框架的JavaScript,需要交互的组件单独声明。本地预览是npm run dev。
日常使用上,改配置后要重新执行npm install和npm run build,node_modules目录装下来几百兆。所以换到了Hexo。
第三版:Hexo
Hexo属于Node生态,当前版本8.1.2,主题是开源的安知鱼(anzhiyu),版本1.7.0。
1 | source/ |
配置两层:站点_config.yml管生成与目录参数,_config.anzhiyu.yml管外观和功能开关。新建文章用hexo new,本地预览用hexo server,生成用hexo generate,输出在public目录。主题自带星空背景、鼠标点击特效、首页打字机、本地搜索、字数统计、访客统计、深色模式、繁简转换、版权声明、音乐页、分类标签归档页、图片灯箱、相对时间,都在主题配置里开关,不用自己写代码。其中本地搜索由生成search.xml、前端检索实现,不依赖外部服务。
默认字体是霞鹜文楷,文章支持封面图、置顶、分类和标签。背景粒子和首页头图自写脚本放置。定制放在_config.anzhiyu.yml里,主题更新不受影响。
三个引擎的产物都是纯静态文件,HTML加CSS加JS,不需要服务端。





