本站使用的 Kratos-Rebirth 主题从 v2.2.0 升级到了 v3.0.1,v3 是一次大版本更新,配置结构发生了较大变化,本文记录完整的升级过程和踩坑经验。
V3 带来了什么
新功能
- Pjax 页面局部更新:页面切换不再整页刷新,浏览体验更流畅
- JSON-LD 结构化数据:优化 SEO,搜索引擎能更好地理解页面内容
- Viewer.js 图片查看器:替换了旧的 Fancybox,支持缩放、旋转等更多操作
- 暗色模式优化:CSS 变量实现,支持 light/dark 分别配置图片和背景
- 搜索功能重构:内置 local 搜索引擎,不再依赖外部插件
- 浮动工具栏注入:支持自定义右下角浮动按钮
- 异步样式表加载:非关键 CSS 异步加载,提升首屏速度
架构变化
- 主题发布为 npm 包
hexo-theme-kratos-rebirth,不再需要将主题源码放在themes/目录 - 配置文件从主题目录下的
_config.yml改为项目根目录的_config.kratos-rebirth.yml - 评论系统从内置集成改为通用模板注入方式,支持任意评论系统
- 友链功能从脚本自动生成改为
linklist标签 + 数据文件方式
升级步骤
1. 安装新版本主题
1 | npm install hexo-theme-kratos-rebirth@latest --save |
安装后主题文件位于 node_modules/hexo-theme-kratos-rebirth/,Hexo 会自动加载。
2. 修改主题引用
编辑项目根目录的 _config.yml,将 theme 改为:
1 | theme: kratos-rebirth |
注意:v2 时填的是主题目录名如
Kratos-Rebirth-2.2.0,v3 使用 npm 包后统一为kratos-rebirth。
3. 创建主题配置文件
在项目根目录新建 _config.kratos-rebirth.yml,这是 v3 的核心配置文件。v2 的配置结构变化较大,以下是主要配置项的对照表:
| v2 配置项 | v3 配置项 | 说明 |
|---|---|---|
site_analytics |
additional_injections.after_footer |
统计脚本注入位置变更 |
site_logo |
image.favicon |
站点图标 |
customStyles.images.banner |
image.banner.light / .dark |
支持亮色/暗色分别设置 |
customStyles.images.background |
image.background.light / .dark |
同上 |
avatarUri |
image.avatar |
头像图片 |
menu + label |
nav.items |
导航栏改为数组格式,每项含 label/icon/url |
contact |
footer.links |
社交链接改为 icon + link 格式 |
fancybox |
viewerjs |
图片查看器更换为 viewer.js |
highlight_theme |
syntax_highlighter.theme |
代码高亮主题 |
sidebar: right |
sidebar.location: right |
侧边栏位置 |
widgets |
sidebar.widgets |
小挂件列表(格式不变) |
twikoo.env_id |
comments.core.template |
评论改为模板注入 |
friends |
linklist 标签 + 数据文件 |
友链功能重构 |
aplayer |
已移除 | 使用生态插件替代 |
click_animate_js / snow |
已移除 | 使用生态插件替代 |
4. 导航栏配置迁移
v2 的导航栏需要分别配置 menu(链接)和 label(文字+图标),v3 合并为 nav.items 数组:
v2 写法:
1 | menu: |
v3 写法:
1 | nav: |
图标名来自 Font Awesome 4.7.0,只需要填写图标的唯一标识(不需要 fa fa- 前缀)。
5. 评论系统迁移
v2 内置了 Twikoo、Valine、Gitalk 等评论系统的配置项,v3 改为通用模板方式。以 Twikoo 为例:
v2 写法:
1 | posts: |
v3 写法:
1 | # 1. 在 head 中加载 Twikoo JS |
虽然配置稍复杂,但好处是支持任意评论系统,不再局限于主题内置的几种。
6. 友链页面迁移
v2 的友链由主题脚本自动生成页面,v3 改为手动创建页面 + linklist 标签。
步骤一: 创建 source/friends/index.md:
1 | --- |
步骤二: 直接在页面 HTML 中添加友链条目即可,使用主题自带的 kr-linklist 样式类保持美观。
也可以用 {% linklist order %} 标签配合 source/_data/linklist.yml 数据文件来管理,但对于友链数量不多的情况,直接写在页面上更直观。
踩坑记录
1. TOC 目录不显示
v3 的 TOC 组件需要文章 front matter 中有 toc: true 才会渲染。如果全局需要 TOC,可以在项目根目录创建 scripts/enable-toc.js:
1 | hexo.extend.filter.register('before_post_render', (data) => { |
2. Twikoo 评论区样式与文章不统一
评论区默认没有背景色,在背景图上显得突兀。可以通过 additional_injections.head 注入自定义 CSS:
1 | <style> |
使用 rgba 半透明背景与文章内容区域保持视觉一致。
3. 旧主题目录残留
升级后 themes/Kratos-Rebirth-2.2.0/ 目录不再使用,可以安全删除以减少项目体积。
4. CSS 预加载警告
控制台可能出现 kr-core.min.css 等文件的预加载警告(crossorigin 属性不匹配),这是 v3 的已知问题,不影响功能,可忽略。
5. CDN 缓存导致样式异常
升级部署后如果样式不正常,大概率是 CDN 缓存了旧的 JS/CSS 文件。解决方法:
- 清除 CDN 缓存(如 Cloudflare 的 Purge Everything)
- 浏览器强制刷新(Ctrl+F5)
后续升级
v3 之后升级非常简单,只需更新 npm 包即可:
1 | npm install hexo-theme-kratos-rebirth@latest |
自定义配置在 _config.kratos-rebirth.yml,自定义脚本在 scripts/ 目录,都不会被升级覆盖。建议升级前查看 GitHub Releases 确认是否有破坏性变更。
完整配置文件参考
以下是本站使用的完整 _config.kratos-rebirth.yml 配置,供参考:
1 | # 系统配置 |