总结一下在 GitHub Pages 用 Hexo 框架建站的流程以及过程中踩过的坑。
NexT 主题
更换 NexT 主题
NexT 是 Hexo 最受欢迎的主题之一,支持多种样式和配置。
打开任意命令行解释器,在 Blog 的根目录执行
1 | git clone git@github.com:theme-next/hexo-theme-next.git themes/next |
或者到 NexT 主题的 GitHub 仓库下载正式发行的压缩包,解压到 themes/next 目录中。
之后编辑 _config.yml 文件中的 themes 配置。
1 | theme: next |
修改 NexT 主题模板
编辑 themes/next/_config.yml 文件中的 scheme 配置。
1 | scheme: Gemini |
修改亮色/暗色模式
编辑 themes/next/_config.yml 文件中的 darkmode 配置。
1 | darkmode: true |
网站个人信息配置
网站基本信息
编辑 _config.yml 文件。可以修改主标题、副标题、简介、关键词、作者名称、语言、时区、访问 URL 等配置。
1 | # Site |
网站 Favicon
配置网站的浏览器标签页图标。
编辑 themes/next/_config.yml 文件中的 favicon 配置。
可以设置为在线或本地图片,默认本地图片存储目录为 themes/next/source/images。如果选择使用本地图片,在网站部署后的图片存储目录为 /images,在编辑配置时需要注意。
头像 Avatar
侧边栏添加个人头像。
编辑 themes/next/_config.yml 文件中的 avatar 配置。
1 | avatar: |
社交账号链接
导航栏/侧边栏添加个人社交账号链接。
编辑 themes/next/_config.yml 文件中的 social 配置。
1 | social: |
Creative Commons
配置网站的 CC 协议。
编辑 themes/next/_config.yml 文件中的 creative_commons 配置。
1 | creative_commons: |
网站页面配置
导航栏/侧边栏
配置导航栏/侧边栏的栏目和外观。
编辑 themes/next/_config.yml 文件中的 menu 配置。
1 | menu: |
网页尾栏
更改网页尾栏的信息。
编辑 themes/next/_config.yml 文件中的 footer 配置。
1 | footer: |
GitHub 标识
设置网站右上角的 GitHub 标识。
编辑 themes/next/_config.yml 文件中的 github_banner 配置。
1 | github_banner: |
Tag icon
为文章底部的每个 Tags 前添加一个 icon。
编辑 themes/next/_config.yml 文件中的 tag_icon 配置。
1 | tag_icon: true |
各种字体
设置网站的字体。包括文字样式,文字大小,在线字体 host 等。
编辑 themes/next/_config.yml 文件中的 font 配置。
1 | font: |
页面加载进度条
启用页面加载时的进度条显示。
编辑 themes/next/_config.yml 文件中的 pace 配置。
1 | pace: |
注意,有时会出现 pace.min.css 和 pace.min.js 文件缺失的情况。此时需要在 themes/next/_config.yml 文件的 vendors 配置中设置CDN的地址,或者手动添加这两个文件到 themes/next/source/lib/pace 目录中。
文章功能配置
公式 MathJax
启用 MathJax 编写公式。
编辑 themes/next/_config.yml 文件中的 math 配置。
1 | math: |
高级 Markdown 渲染
启用 Markdown-it 作为渲染引擎来解析 Markdown 文本。
打开命令行,在 Blog 的根目录执行
1 | npm uninstall hexo-renderer-marked --save |
编辑 _config.yml 文件,添加 markdown 配置。
1 | markdown: |
图片浏览插件 Fancybox
查看文章图片时使用 FancyBox 插件。
编辑 themes/next/_config.yml 文件中的 fancybox 配置。
1 | fancybox: true |
在某些情况下,我们可能不希望所有图片都启用 Fancybox 功能。编辑 themes/next/source/js/src/utils.js 文件,找到 wrapImageWithFancyBox 函数,在特定位置添加一行代码:
1 | wrapImageWithFancyBox: function() { |
在写文章时,如果不希望某张图片启用 Fancybox 功能,可以在该图片的 <img> 标签中添加 nofancybox 类。
字数统计插件
打开命令行,在 Blog 的根目录执行
1 | npm install hexo-word-counter --save |
编辑 _config.yml 文件,添加 symbol_count_time 配置。
1 | symbols_count_time: |
评论插件 Valine (不建议使用)
添加 Valine 评论系统。Valine 是基于 LeanCloud 云服务的前端评论系统,要启用 Valine 需要事先在 LeanCloud 注册并创建一个应用获取 Appid 和 AppKey。
上述步骤完成之后,编辑 themes/next/_config.yml 文件中的 valine 配置。
1 | valine: |
由于 Valine 评论系统完全基于 JavaScript 前端实现,评论内容不会受到服务器端的验证,因此可能会存在垃圾评论的情况。现在 Valine 已经不再建议使用,可以转而使用 Waline 等其他评论系统。
站内搜索
启用站内搜索需要安装hexo-generator-searchdb 插件。
打开命令行,在 Blog 的根目录执行
1 | npm install hexo-generator-searchdb --save |
之后编辑 themes/next/_config.yml 文件中的 local_search 配置。
1 | local_search: |
阅读进度条和进度显示
启用阅读进度条和进度显示。
编辑 themes/next/_config.yml 文件中的 back2top 和 reading_progress 配置。
1 | back2top: |
文章隐藏
启用文章隐藏功能可以通过修改文章生成的源代码来实现,为了方便可以安装hexo-hide-posts 插件。
打开命令行,在 Blog 的根目录执行
1 | npm install hexo-hide-posts --save |
之后编辑 _config.yml 文件,添加:
1 | # hexo-hide-posts |
在写文章时,如果想要隐藏文章,在 front-matter 添加 hidden: true 即可。
网站美化 (进阶)
更换背景图片
更换网站的背景图片。
编辑 themes/next/source/css/main.styl 文件。添加如下代码:
1 | // Customized Background |
需要特别注意:如果使用了 Dark Reader 等浏览器插件,可能会导致自定义的 CSS 样式被覆盖,届时背景图片的样式可能不会正常显示。一些有关的问题在 Dark Reader 的 GitHub 主页上有相关的 issue 讨论,但仍未得到解决。
如果希望加上背景图随着鼠标移动而移动的效果,可以使用 parallax。忽略上面的代码,编辑 themes/next/source/css/main.styl 文件。添加如下代码:
1 | .parallax-background { |
然后,在 themes/next/layout/_layout.swig 文件中的 <body> 前添加如下 JavaScript 代码:
1 | <script> |
最后在 themes/next/layout/_layout.swig 文件中的 <body> 标签内添加一个 div 元素作为背景图片容器:
1 | <div class="parallax-background" id="parallax-bg"></div> |
更改页面元素透明度
为了使得背景图片不被侧边栏和文章页面遮挡,需要修改页面元素透明度。
编辑 themes/next/source/css/main.styl 文件。添加如下代码:
1 | .header-inner { /* 分栏背景色 */ |
注意:实际上应当尽量避免使用 opacity 属性,因为它会影响到子元素的透明度。这里使用 rgba 来设置颜色的透明度。
更改代码块样式
更改代码块的主题样式。
编辑 themes/next/_config.yml 文件中的 codeblock 配置。
1 | codeblock: |
此外,在某些情况下,文本行内的内联代码块样式不会随 NexT 主题的亮色/暗色模式的更改而发生变化。此时需要手动调整内联代码块 <code> 的样式,这里只调整暗色模式下的代码块样式。
编辑 themes/next/source/css/main.styl 文件。添加如下代码:
1 | code { |
更改滚动条样式
更改右侧滚动条样式。
编辑 themes/next/source/css/main.styl 文件。添加如下代码:
1 | // Customized Scrollbar |
添加网站建立时间
在尾栏 footer 添加网站建立时间计时器。
编辑 themes/next/layout/_partials/footer.swig 文件。
1 | {%- if theme.footer.powered %} |
Live2D
hexo-helper-live2d (不建议使用)
打开命令行,在 Blog 的根目录执行
1 | npm install hexo-helper-live2d --save |
编辑 _config.yml 文件,加入如下代码:
1 | ## Live2d |
hexo-helper-live2d 自带部分公开的 Live2D 模型可供使用,具体可以在 https://github.com/xiazeyu/live2d-widget-models 查看和下载。hexo-helper-live2d 也支持自定义模型文件。自定义的模型文件需要存放在 Blog 根目录的 live2d_models 目录中,并且也需要修改 _config.yml 配置中相应的模型名称,在生成静态文件时会根据配置进行读取。
live2d-widget
参考项目:在网页中添加Live2D看板娘
打开命令行,在 Blog 的根目录执行
1 | git clone git@github.com:stevenjoezhang/live2d-widget.git themes/next/source/live2d-widget |
编辑 themes/next/source/live2d-widget/autoload.js 文件,修改 live2d_path 为部署后静态文件的相对路径:
1 | const live2d_path = "/live2d-widget/dist/"; |
编辑 themes/next/layout/_layout.swig 文件,在 <head> 和 <body> 之间添加如下代码:
1 | <script src="/live2d-widget/dist/autoload.js"></script> |
编辑 themes/next/_config.yml 文件,添加 live2d 配置。
1 | live2d: |
本站使用的是非默认的 Live2D 模型,在不使用 CDN 的情况下,一般将模型文件放置在 themes/next/source/live2d-widget/dist/assets 目录中。然后,修改 themes/next/source/live2d-widget/dist/waifu-tips.json 配置文件。
1 | { |
如果 Live2D 模型的位置未贴合页面最下方,可以通过修改 themes/next/source/live2d-widget/dist/waifu.css 样式文件中的属性,在 #waifu 标签中添加:
1 | #waifu { |
手动调整 Live2D 的模型大小和方向,可以通过修改 #live2d 标签来实现:
1 | #live2d { |
当然,这里并没有考虑到鼠标光标移动时与 Live2D 的 Canvas 的交互效果,这个问题以后有时间再解决。
另外,在使用 live2d-widget 在隐藏后再点击 waifu-toggle 可能会存在显示时图像消失的问题。这个问题可以通过修改 themes/next/source/live2d-widget/waifu-tips.js 中的监听事件函数解决。
live2d-widget 项目经过重构后,waifu-tips.js 文件已经过混淆处理,一种简便的修改方式为:
- 在
waifu-tips.js文件中Ctrl+F搜索并定位3e3; - 将位置左侧附近的
e.classList.add("waifu-hidden");注释掉。
以下是一些 Live2D 模型相关资源的链接:
Hexo 的使用相关
Hexo 常用命令
1 | # 生成静态文件 |
使用 SSH 进行部署
Hexo 默认的 git 使用 HTTPS 协议。由于 GitHub 的 HTTPS 443 端口由于网络连接原因经常出现连接超时的情况,因此建议为 GitHub 配置 SSH keys 方便今后部署到 GitHub Pages。
这里省略生成 SSH key、本地配置 SSH config 文件、在 GitHub 配置 SSH key 等步骤,只介绍 Hexo 配置 SSH 的步骤。
启用 SSH 需要安装hexo-deployer-git 插件。打开命令行,在 Blog 的根目录执行
1 | npm install hexo-deployer-git --save |
之后编辑 _config.yml 文件。
1 | deploy: |