Hexo主题Kratos-Rebirth从V2升级到V3完整指南

  • ~6.18K 字
  • 0 次阅读 次阅读
  • 0 评论 条评论
  1. 1. V3 带来了什么
    1. 1.1. 新功能
    2. 1.2. 架构变化
  2. 2. 升级步骤
    1. 2.1. 1. 安装新版本主题
    2. 2.2. 2. 修改主题引用
    3. 2.3. 3. 创建主题配置文件
    4. 2.4. 4. 导航栏配置迁移
    5. 2.5. 5. 评论系统迁移
    6. 2.6. 6. 友链页面迁移
  3. 3. 踩坑记录
    1. 3.1. 1. TOC 目录不显示
    2. 3.2. 2. Twikoo 评论区样式与文章不统一
    3. 3.3. 3. 旧主题目录残留
    4. 3.4. 4. CSS 预加载警告
    5. 3.5. 5. CDN 缓存导致样式异常
  4. 4. 后续升级
  5. 5. 完整配置文件参考

本站使用的 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
2
3
4
5
6
7
8
9
10
11
menu:
index: /
archives: /archives/
friends: /friends/
about: /about/

label:
index: <i class="fa fa-home"></i>首页
archives: <i class="fa fa-file"></i>档案馆
friends: <i class="fa fa-paw"></i>友情链接
about: <i class="fa fa-paper-plane"></i>关于

v3 写法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
nav:
items:
- label: 首页
icon: home
url: /
- label: 档案馆
icon: file
url: /archives/
- label: 友情链接
icon: paw
url: /friends/
- label: 关于
icon: paper-plane
url: /about/

图标名来自 Font Awesome 4.7.0,只需要填写图标的唯一标识(不需要 fa fa- 前缀)。

5. 评论系统迁移

v2 内置了 Twikoo、Valine、Gitalk 等评论系统的配置项,v3 改为通用模板方式。以 Twikoo 为例:

v2 写法:

1
2
3
4
5
posts:
comments:
provider: 'twikoo'
twikoo:
env_id: https://twikoo.example.com/

v3 写法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 1. 在 head 中加载 Twikoo JS
additional_injections:
head: |
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/twikoo.all.min.js"></script>

# 2. 在 comments 中配置模板
comments:
core:
enable_at:
- post
- page
template:
_shared: |
<div id="tcomment"></div>
<script>
twikoo.init({
envId: 'https://twikoo.example.com/',
el: '#tcomment',
});
</script>
index: ""
post: ""
page: ""

虽然配置稍复杂,但好处是支持任意评论系统,不再局限于主题内置的几种。

6. 友链页面迁移

v2 的友链由主题脚本自动生成页面,v3 改为手动创建页面 + linklist 标签。

步骤一: 创建 source/friends/index.md

1
2
3
4
5
6
7
8
9
10
11
---
title: 友情链接
type: friends
comments: false
---

<div class="kr-linklist">
<ul class="kr-linklist-container">
<li><a target="_blank" href="https://example.com"><img src="/images/web.png" alt="站点名" /><div><span>站点名</span><p>站点描述</p></div></a></li>
</ul>
</div>

步骤二: 直接在页面 HTML 中添加友链条目即可,使用主题自带的 kr-linklist 样式类保持美观。

也可以用 {% linklist order %} 标签配合 source/_data/linklist.yml 数据文件来管理,但对于友链数量不多的情况,直接写在页面上更直观。

踩坑记录

1. TOC 目录不显示

v3 的 TOC 组件需要文章 front matter 中有 toc: true 才会渲染。如果全局需要 TOC,可以在项目根目录创建 scripts/enable-toc.js

1
2
3
4
5
6
hexo.extend.filter.register('before_post_render', (data) => {
if (typeof data.toc === 'undefined') {
data.toc = true;
}
return data;
});

2. Twikoo 评论区样式与文章不统一

评论区默认没有背景色,在背景图上显得突兀。可以通过 additional_injections.head 注入自定义 CSS:

1
2
3
4
5
6
7
8
<style>
.comment-post {
margin-top: 10px;
background-color: rgba(255, 255, 255, 0.9);
padding: 15px;
border-radius: 4px;
}
</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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# 系统配置
check_update: true
pjax: true
viewerjs: true
search:
provider: "local"
path:
page: search
index_file: search-index.json
includes:
- post
- page
content: true

# 图片配置
image:
favicon: "/images/favicon.ico"
avatar: "/images/avatar1.bmp"
banner:
light: "/images/banner.webp"
dark: "/images/banner.webp"
background:
light: "/images/bg.png"
dark: "/images/bg.png"

# 导航栏
nav:
auto_hide: true
items:
- label: 首页
icon: home
url: /
- label: 档案馆
icon: file
url: /archives/
- label: 友情链接
icon: paw
url: /friends/
- label: 关于
icon: paper-plane
url: /about/

# 侧边栏
sidebar:
location: right
widgets:
- about
- splitter
- toc
- category
- tagcloud
- posts

# 文章配置
posts:
donate: false
share: true
word_count:
enable: true
threshold: 1500
estimate_wavy: true
toc:
desktop:
options:
list_number: false
mobile:
enable: true
options:
list_number: true

# 代码高亮
syntax_highlighter:
theme: night-eighties

更多配置项可参考主题的 默认配置快速开始模板

打赏
打赏提示信息
分享
分享提示信息