少女祈祷中...

因为本人是车车人,所以制作了 hexo-theme-reimu 这样一款博丽灵梦风格的 Hexo 主题,其融合了landscapeTangyuxianShoka三个主题

Github 仓库请点击:(如果觉得好用请点个 star,阿里嘎多)

Github
Github
https://github.com/D-Sketon/hexo-theme-reimu

效果展示请点击:

hexo-theme-reimu效果展示
hexo-theme-reimu效果展示
hexo-theme-reimu效果展示

开发日志请点击:

hexo-theme-reimu开发日志
hexo-theme-reimu开发日志
hexo-theme-reimu 的开发日志,记录了每一次更新的内容 如果你有任何问题或建议,欢迎提交 [Issues](https://github.com/D-Sketon/hexo-theme-reimu/issues) ## v0.3.4 **2024.11.16** ### 修复 - 各种乱七八糟的杂项修复 - 优化 excerpt 的显示逻辑 - `excerpt` 字

astro-theme-reimu 效果展示请点击演示网站
hugo-theme-reimu 效果展示请点击演示网站

特性

  • 所有的博客常规功能
  • 兼容 Hexo v6+
  • 响应式布局
  • 代码高亮,代码粘贴
  • KaTeX 展示数学公式
  • Mermaid 展示流程图
  • Algolia / hexo-generator-search 搜索
  • valine / waline / twikoo / gitalk / giscus 评论系统
  • valine / waline 文章阅读统计
  • 不蒜子访客统计
  • RSS
  • 同时支持 iconfont 和 fontawesome
  • 黑夜模式
  • 图片懒加载
  • 加载动画
  • TOC
  • 回到顶部
  • 鼠标动画
  • pjax
  • ServiceWorker
  • live2d
  • reimu 鼠标指针
  • 内部提供内链/外链/友链卡片的标签插件
  • 文章底部版权声明
  • 配置自定义 CDN 源

安装

纯小白可以直接使用 reimu-template。其中预先安装了 hexo, hexo-theme-reimu 和其他功能包,只需 克隆仓库-安装依赖-修改配置 即可获得一个基本的博客!
其已经包含如下功能包,你只需要对其进行配置:

  • katex (hexo-renderer-markdown-it-plus)
  • mermaid (hexo-filter-mermaid-diagrams)
  • git deploy (hexo-deployer-git)
  • rss (hexo-generator-feed)

使用 npm

1
npm install hexo-theme-reimu --save

或直接克隆本仓库/themes文件夹下并重命名为reimu

1
git clone https://github.com/D-Sketon/hexo-theme-reimu.git

并修改 _config.yml 中的 theme

1
2
3
4
# Extensions
## Plugins: https://hexo.io/plugins/
## Themes: https://hexo.io/themes/
theme: reimu

使用

基本结构

为了保证显示正确,请参考 _examplesource 中分别建立 _dataaboutfriend 文件夹

_data

  • avatar 文件夹中存储作者头像,默认命名 avatar.webp,可在 内层 _config.yml 中做如下配置
1
avatar: "avatar.webp"
  • covers 文件夹中存储文章封面
  • covers.yml 中存储文章封面 url

about

index.md 作为关于页面

friend

index.md 作为友链页面,在 _data.yml 中填入友链信息即可在页面上显示对应好友卡片

封面、头图和图标

封面

封面显示逻辑如下

  • 如果文章的 Front matter 中包含 cover 的 url,则该文章头图和首页缩略图均显示该 url
1
2
3
4
---
title: Hello World
cover: https://example.com
---
  • 如果文章的 Front matter 中包含 cover 为false,则该文章不显示头图(首页上仍然是随机图片)
1
2
3
4
---
title: Hello World
cover: false
---
  • 如果文章的 Front matter 中包含 cover 为rgb(xxx,xxx,xxx),则该文章头图为对应的渐变纯色(首页上仍然是随机图片)
1
2
3
4
---
title: Hello World
cover: rgb(255,117,117)
---
  • 否则查找 covers 文件夹和 covers.yml,并从中随机挑选图片
  • 若上述文件均不存在,则显示头图

头图

头图保存于 themes/reimu/source/images/banner.webp,可在内层 _config.yml中修改

1
banner: "/images/banner.webp"

图标

图标保存于 themes/reimu/source/images/favicon.ico,可在内层 _config.yml中修改

1
favicon: "/images/favicon.ico"

置顶

在文章的 Front-matter 中添加 sticky: true

1
2
3
4
---
title: Hello World
sticky: true
---

代码高亮

为保证代码块的正确显示,请保证外层 _config.yml 中为如下配置

(<7.0.0)

1
2
3
4
5
6
highlight:
enable: true
wrap: true
hljs: false
prismjs:
enable: false

(>=7.0.0)

1
2
3
4
syntax_highlighter: highlight.js
highlight:
wrap: true
hljs: false

代码块同时提供了代码粘贴功能,点击代码块右上角的复制按钮即可复制代码。在内层 _config.yml 中可以对复制功能进行配置。
success 为复制成功时的提示,fail 为复制失败时的提示。此外,可以配置版权声明,当复制的字符数大于 count 时会在复制的内容后面添加 content 版权声明。

1
2
3
4
5
6
7
clipboard:
success: 复制成功(*^▽^*)
fail: 复制失败 (゚⊿゚)ツ
copyright:
enable: false
count: 50 # 大于多少字符添加版权声明
content: 本文版权:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

站内评论

站内评论可以使用Front matter 中的 comments 独立控制每篇文章是否显示评论。
commentsfalse 时不显示评论,true 或不填时根据 _config_yml 的配置决定是否显示。

若基于 Valine
请参考其官方文档完成 LeanCloud 的配置,并在内层 _config_yml 中将 valine.enable 改为 true,并填入自己的 appIdappKey

1
2
3
4
valine:
enable: true
appId: "your appId"
appKey: "your appKey"

若基于 Waline
请参考其官方文档完成 LeanCloud 的配置,并在内层 _config_yml 中将 waline.enable 改为 true,并填入自己的 serverURL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
waline:
enable: true
serverURL: "your server url"
lang: zh-CN
locale: {} # https://waline.js.org/guide/features/i18n.html#%E8%87%AA%E5%AE%9A%E4%B9%89%E8%AF%AD%E8%A8%80
emoji:
- https://unpkg.com/@waline/emojis@1.2.0/weibo
- https://unpkg.com/@waline/emojis@1.2.0/alus
- https://unpkg.com/@waline/emojis@1.2.0/bilibili
- https://unpkg.com/@waline/emojis@1.2.0/qq
- https://unpkg.com/@waline/emojis@1.2.0/tieba
- https://unpkg.com/@waline/emojis@1.2.0/tw-emoji
meta:
- nick
- mail
- link
requiredMeta:
- nick
- mail
wordLimit: 0
pageSize: 10
pageview: true

若基于 twikoo
请参考其官方文档完成 腾讯云 或 Vercel 部署,并在内层 _config_yml 中将 twikoo.enable 改为 true,并填入自己的 envId

1
2
3
4
twikoo:
enable: true
envId: # 腾讯云环境填 envId;Vercel 环境填地址(https://xxx.vercel.app)
region:

若基于 giscus,请参考文档完成仓库的配置,并在内层 _config_yml 中将 giscus.enable 改为 true,并填入对应的数据

1
2
3
4
5
6
7
8
9
10
11
12
13
giscus:
enable: true
repo: "your repo"
repoId: "your repoId"
category: "your category"
categoryId: "your categoryId"
mapping: mapping
strict: 0
reactionsEnabled: 1
emitMetadata: 0
inputPosition: bottom
commentTheme: preferred_color_scheme
lang: zh-CN

若基于 gitalk
请参考其官方文档完成仓库的配置,并在内层 _config_yml 中将 gitalk.enable 改为 true,并填入对应的数据

1
2
3
4
5
6
7
8
gitalk:
enable: true
clientID: "your application client ID"
clientSecret: "your application client secret"
repo: "your repo"
owner: "repo owner"
admin: "repo owner and collaborators"
md5: false # 是否使用 md5 加密路径

站内搜索

若选择 Algolia,请安装 hexo-algoliasearch

1
npm install hexo-algoliasearch --save

并参考其 README 完成对 Algolia 账号的配置,并在外层 _confg.yml 中添加如下配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
algolia:
appId: "your applicationID"
apiKey: "your apiKey"
adminApiKey: "your adminApiKey"
indexName: "your indexName"
chunkSize: 5000
fields:
- content:strip:truncate,0,500
- excerpt:strip
- gallery
- permalink
- photos
- slug
- tags
- title

在内层 _config_yml 中将 algolia_search.enable 改为 true

1
2
algolia_search:
enable: true

注意:搜索跳转链接为永久链接,所以请保证外层 _config.yml 中的 url 填写正确


若选择 hexo-generator-search,请安装hexo-generator-search

并参考其 README在外层 _config.yml 中添加如下配置

1
2
3
4
search:
path: search.json # 文件名必须为search.json
field: post
content: true

在内层 _config_yml 中将 generator_search.enable 改为 true

1
2
generator_search:
enable: true

数学公式

数学公式基于 Katex,请安装 hexo-renderer-markdown-it-plus

1
2
npm uninstall hexo-renderer-marked --save
npm install hexo-renderer-markdown-it-plus --save

在内层 _config_yml 中将 math.enable 改为 true

1
2
math:
enable: true

Mermaid

请安装 hexo-filter-mermaid-diagrams

1
npm install hexo-filter-mermaid-diagrams --save

在内层 _config_yml 中将 mermaid.enable 改为 true

1
2
mermaid:
enable: true

并在需要使用 mermaid 的文章的 front-matter 中添加 mermaid: true这个和其他配置的读取逻辑不同,需要注意!

1
2
3
4
---
title: Hello World
mermaid: true
---

RSS

请安装 hexo-generator-feed

1
npm install hexo-generator-feed --save

并参考其 README 在外层 _config.yml 完成对 feed 的配置
在内层 _config.yml 中填入生成的 xml

1
rss: atom.xml

Icon

Icon 默认使用本项目提供的 iconfont(v0.2.0+)

1
icon_font: 4552607_ikzjpc9jicn

如果想要继续使用 fontawesome 图标,请将 icon_font 设置为 false,此时会使用 vendor 中对应的 fontawesome

1
2
3
4
5
6
7
8
fontawesome:
high_priority:
- webcache|@fortawesome/fontawesome-free@6.5.1/css/regular.min.css
- webcache|@fortawesome/fontawesome-free@6.5.1/css/solid.min.css
low_priority:
- webcache|@fortawesome/fontawesome-free@6.5.1/css/brands.min.css
- webcache|@fortawesome/fontawesome-free@6.5.1/css/v5-font-face.min.css
- webcache|@fortawesome/fontawesome-free@6.5.1/css/v4-font-face.min.css

高级功能

firework

默认开启

1
2
firework:
enable: true

具体配置请查看 mouse-firework

pjax

默认关闭

1
2
pjax:
enable: false

pjax 在 v0.0.10 中被引入,用于那些需要添加音乐播放器等需要 SPA 的用户。但其仍然属于实验性质,引入后可能会出现诸如脚本无法执行脚本重复执行页面渲染混乱等 BUG。请慎重考虑!

ServiceWorker

默认关闭

1
2
service_worker:
enable: false

live2d

默认关闭

1
2
live2d:
enable: false

reimu 鼠标指针

默认开启

1
reimu_cursor: true

头图响应式(v0.2.0+)

默认关闭,打开后并提供对应尺寸的图片和媒体查询可以在一定程度上提高移动端的 LCP

1
2
3
4
5
6
7
8
9
banner_srcset:
enable: false
srcset:
- src: "/images/banner-600w.webp"
media: "(max-width: 479px)"
- src: "/images/banner-800w.webp"
media: "(max-width: 799px)"
- src: "/images/banner.webp"
media: "(min-width: 800px)"

文章版权声明(v0.2.0+)

默认关闭

1
2
3
4
5
6
7
8
9
article_copyright:
enable: false # 是否展示版权卡片?
content:
author: # true | false 版权卡片展示作者?
link: # true | false 版权卡片展示链接?
title: # true | false 版权卡片展示标题?
date: # true | false 版权卡片展示创建日期?
updated: # true | false 版权卡片展示更新日期?
license: # true | false 版权卡片展示协议?

此外,也可以通过文章的 front-matter 控制,其优先级高于全局配置

1
2
3
---
copyright: true # 是否展示版权卡片?
---

quicklink(v0.2.3+)

默认开启,打开后可以在用户停留在页面时预加载链接,提高用户体验

1
2
3
4
5
quicklink:
enable: true
timeout: 3000 # 预加载超时时间
priority: true # 是否优先加载
ignores: [] # 忽略的链接,仅支持字符串

过期提醒(v0.2.4+)

默认关闭

1
2
3
4
outdate:
enable: false
daysAgo: 180 # 多少天前的文章算过期
message: 本文最后更新于 {time},请注意文中内容可能已经发生变化。

赞助(v0.3.2+)

默认关闭

1
2
3
4
5
6
sponsor:
enable: false # 是否展示赞助二维码?
tip: 请作者喝杯咖啡吧! # 赞助提示
qr:
- name: 支付宝 # 二维码名称
src: "/sponsor/alipay.jpg" # 二维码路径,请自行填写

此外,也可以通过文章的 front-matter 控制,其优先级高于全局配置

1
2
3
---
sponsor: true # 是否展示赞助二维码?
---

Vendor

v0.1.0 对 vendor 进行了较大程度的重构,目前 vendor 路径的组成方式为::cdn|:package@:version/:file:cdn可在 vendor 中自行配置。目前自带以下 CDN 源:

1
2
3
4
5
6
cdn_jsdelivr_gh: https://cdn.jsdelivr.net/gh/ # 仅针对github加速
cdn_jsdelivr_npm: https://cdn.jsdelivr.net/npm/ # 仅针对npm加速
fastly_jsdelivr_gh: https://fastly.jsdelivr.net/gh/ # 仅针对github加速
fastly_jsdelivr_npm: https://fastly.jsdelivr.net/npm/ # 仅针对npm加速
unpkg: https://unpkg.com/ # 仅针对npm加速
webcache: https://npm.webcache.cn/ # 仅针对npm加速

用户可根据网络状况自行切换 CDN 源。

QA

为什么没有播放器功能

因为播放器功能相对独立,且较为复杂,所以本主题不提供播放器功能。如果需要播放器功能,可以参考 hexo-tag-aplayerhexo-tag-dplayer 等插件。在使用时注意播放器可能会和 pjax,ServiceWorker 等功能冲突。

头像显示不正常

参考 reimu-template 的结构保证头像放置于了 /source/_data/avatar/ 下,且命名和配置里的相同(注意不是主题里的 source 文件夹而是主题根目录下的 source 文件夹

关于和友链页面显示乱码,没有样式

参考 reimu-template 的结构保证 aboutfriend 放置于了 /source/ 下(注意不是主题里的 source 文件夹而是主题根目录下的 source 文件夹

我还是有奇怪的问题

首先尝试直接克隆 reimu-template,并在其基础上进行修改。如果问题依然存在,请到 Github issue上提问,并提供详细的报错信息/复现步骤。不建议在评论区报告问题,因为评论区不方便进行代码排版。