基于 Hexo 从零开始搭建个人博客(五)
阅读本篇前,请先阅读前几篇文章:
基于 Hexo 从零开始搭建个人博客(一)
基于 Hexo 从零开始搭建个人博客(二)
基于 Hexo 从零开始搭建个人博客(三)
基于 Hexo 从零开始搭建个人博客(四)
前言
本站基于
Hexo
搭建,用的 🦋 hexo-theme-butterfly 主题 v3.7.1,请注意最新的🦋 hexo-theme-butterfly 版本已经更新到 v4.3.0 。
如果你是 v3.7.1 之外的版本,可能有些地方会有出入,请留意。
注意:我的博客根目录路径为 【G:/hexo-blog/blog-demo】,下文所说的根目录都是此路径,将用
[BlogRoot]
代替。如果不清楚根目录路径,请回到教程 基于 Hexo 从零开始搭建个人博客(二),查看你执行hexo init xxx
这条命令时所选择的路径,例如我选择的路径是【G:/hexo-blog】,我的博客根目录即为【G:/hexo-blog/xxx】。
修改站点配置文件_config.yml
,路径为【BlogRoot/_config.yml】。
修改主题配置文件_config.butterfly.yml
,路径为【BlogRoot/_config.butterfly.yml】。
语言
修改站点配置文件_config.yml
,默认语言是 en 。
主题支持三种语言:
- default(en)
- zh-CN (简体中文)
- zh-TW (繁体中文)
网站资料
修改网站各种资料,例如标题、副标题和邮箱等个人资料,请修改站点配置文件_config.yml
。部分参数如下,详细参数可参考官方的配置描述。
参数 | 描述 |
---|---|
title | 网站标题 |
subtitle | 描述 |
description | 网站描述 |
keywords | 网站的关键词。支持多个关键词。 |
author | 您的名字 |
language | 网站使用的语言。对于简体中文用户来说,使用不同的主题可能需要设置成不同的值,请参考你的主题的文档自行设置,常见的有 zh-Hans和 zh-CN。 |
timezone | 网站时区。Hexo 默认使用您电脑的时区。请参考 时区列表 进行设置,如 America/New_York, Japan, 和 UTC 。一般的,对于中国大陆地区可以使用 Asia/Shanghai。 |
导航菜单
修改主题配置文件_config.butterfly.yml
。
menu: |
必须是 /xxx/
,后面||
分开,然后写图标名。
如果不希望显示图标,图标名可不写。
v3.7.1 版本中直接默认子目录是展开的,如果你想要隐藏,后续在魔改中会提到。
若主题版本大于 v4.0.0,可以直接在子目录里添加 hide
。
menu: |
注意: 导航的文字可自行更改
例如:
menu: |
代码
代码块中的所有功能只适用于 Hexo 自带的代码渲染。
如果使用第三方的渲染器,不一定会有效。
代码高亮主题
Butterfly
支持 6 种代码高亮样式:
- darker
- pale night
- light
- ocean
- mac
- mac light
修改主题配置文件_config.butterfly.yml
。中的highlight_theme
属性。
highlight_theme: light |
代码复制
修改主题配置文件_config.butterfly.yml
。中的highlight_copy
属性。
highlight_copy: true |
代码框展开/关闭
修改主题配置文件_config.butterfly.yml
。中的highlight_shrink
属性。
highlight_shrink: true #代码框不展开,需点击 '>' 打开 |
在默认情况下,代码框自动展开,可设置是否所有代码框都关闭状态,点击>
可展开代码。
- true 全部代码框不展开,需点击
>
打开 - false 代码框展开,有
>
点击按钮 - none 不显示
>
按钮
代码换行
在默认情况下,Hexo 在编译的时候不会实现代码自动换行。如果你不希望在代码块的区域里有横向滚动条的话,那么你可以考虑开启这个功能。
修改主题配置文件_config.butterfly.yml
。中的code_word_wrap
属性。
code_word_wrap: true |
代码高度限制
v3.7.0 及以上支持。
可配置代码高度限制,超出的部分会隐藏,并显示展开按钮。
highlight_height_limit: false # unit: px |
注意:
- 单位是
px
,直接添加数字,如 200 - 实际限制高度为
highlight_height_limit + 30 px
,多增加 30px 限制,目的是避免代码高度只超出highlight_height_limit 一点时,出现展开按钮,展开没内容。 - 不适用于隐藏后的代码块( css 设置
display: none
)。
社交图标
Butterfly
支持font-awesome v6图标。
书写格式:图标名:url || 描述性文字
。
social: |
顶部图
如果不要显示顶部图,可直接配置
disable_top_img: true
。
配置 | 解释 |
---|---|
index_img | 主页的 top_img |
default_top_img | 默认的 top_img,当页面的 top_img 没有配置时,会显示 default_top_img |
archive_img | 归档页面的 top_img |
tag_img | tag子页面 的 默认 top_img |
tag_per_img | tag子页面的 top_img,可配置每个 tag 的 top_img |
category_img | category 子页面 的 默认 top_img |
category_per_img | category 子页面的 top_img,可配置每个 category 的 top_img |
修改主题配置文件_config.butterfly.yml
。
index_img: xxx.png |
其它页面 (tags/categories/自建页面)和文章页的top_img
,请到对应的 md 页面设置front-matter
中的top_img
。
3.2.0 以下版本的配置只支持
- 留空,true 和 false - 显示默认的颜色
- img链接 - 显示所配置的图片
配置的值 | 效果 |
---|
| 留空| 显示默认的top_img(如有),否则显示默认的颜色
(文章页top_img留空的话,会显示 cover 的值)|
| img链接| 图片的链接,显示所配置的图片|
| 颜色(
HEX值 - #0000FF
RGB值 - rgb(0,0,255)
颜色单词 - orange
渐变色 - linear-gradient( 135deg, #E2B0FF 10%, #9F44D3 100%)
)| 对应的颜色|
| transparent| 透明|
| false| 不显示 top_img|
tag_per_img
和category_per_img
是 v3.2.0 新增的内容,可对 tag 和 category 进行单独的配置。
并不推荐为每个 tag 和每个 category 都配置不同的顶部图,因为配置太多会拖慢生成速度。
tag_per_img: |
文章置顶
【推荐】hexo-generator-index
从 v2.0.0 开始,已经支持文章置顶功能。你可以直接在文章的front-matter
区域里添加sticky: 1
属性来把这篇文章置顶。数值越大,置顶的优先级越大。
文章封面
文章的markdown文档上,在Front-matter
添加cover
,并填上要显示的图片地址。如果不配置cover
,可以设置显示默认的cover
。
如果不想在首页显示cover,可以设置为false
。
修改主题配置文件_config.butterfly.yml
。
cover: |
当配置多张图片时,会随机选择一张作为cover,此时写法应为:
default_cover: |
文章页相关配置
文章meta显示
post_meta
这个属性用于显示文章的相关信息的。
修改主题配置文件_config.butterfly.yml
。
post_meta: |
文章版权和协议许可
修改主题配置文件_config.butterfly.yml
。
post_copyright: |
由于Hexo 4.1
开始,默认对网址进行解码,以至于如果是中文网址,会被解码,可设置decode: true
来显示中文网址。
如果有文章(例如:转载文章)不需要显示版权,可以在文章页Front-matter
中单独设置。
copyright: false |
从v3.0.0 开始,支持对单独文章设置版权信息,可以在文章Front-matter单独设置。
post_copyright: |
文章打赏
修改主题配置文件_config.butterfly.yml
。
reward: |
TOC
修改主题配置文件_config.butterfly.yml
。
toc: |
属性 | 解释 |
---|---|
post | 文章页是否显示 TOC |
page | 普通页面是否显示 TOC |
number | 是否显示章节数 |
expand | 是否展开 TOC |
style_simple | 简洁模式(侧边栏只显示 TOC, 只对文章页有效 ) |
相关文章推荐
相关文章推荐的原理是根据文章tags的比重来推荐。
修改主题配置文件_config.butterfly.yml
。
related_post: |
文章锚点
开启文章锚点后,当你在文章页进行滚动时,文章链接会根据标题ID进行替换。
注意: 每替换一次,会留下一个歷史记录。所以如果一篇文章有很多锚点的话,网页的歷史记录会很多。
修改主题配置文件_config.butterfly.yml
。
# anchor |
文章过期提醒
可设置是否显示文章过期提醒,以更新时间为基准。
# Displays outdated notice for a post (文章过期提醒) |
limit_day
: 距离更新时间多少天才显示文章过期提醒。message_prev
: 天数之前的文字。message_next
:天数之后的文字。
文章分页按钮
修改主题配置文件_config.butterfly.yml
。
# post_pagination (分页) |
参数 | 解释 |
---|---|
post_pagination: false | 关闭分页按钮 |
post_pagination: 1 | 下一篇显示的是旧文章 |
post_pagination: 2 | 下一篇显示的是新文章 |
头像
avatar: |
图片描述
可开启图片Figcaption
描述文字显示,优先显示图片的title
属性,然后是alt
属性。
修改主题配置文件_config.butterfly.yml
。
photofigcaption: false |
文章内容复制相关配置
# copy settings |
配置 | 解释 |
---|---|
enable | 是否开启网站复制权限 |
copyright | 复制的内容后面加上版权信息 |
enable | 是否开启复制版权信息添加 |
limit_count | 字数限制,当复制文字大于这个字数限制时,将在复制的内容后面加上版权信息 |
添加版权后的效果:
<div class="gallery-group-main"> |
Footer 设置
博客年份
修改主题配置文件_config.butterfly.yml
。
footer: |
页脚自定义文本
custom_text
是一个给你用来在页脚自定义文本的选项。通常你可以在这里写声明文本等。支持 HTML。
修改主题配置文件_config.butterfly.yml
。
本人的页脚如下,若你在配置时没有出现github徽章,请参考教程添加Github徽标。
custom_text: I wish you to become your own sun, no need to rely on who's light.<p><a target="_blank" href="https://hexo.io/"><img src="https://img.shields.io/badge/Frame-Hexo-blue?style=flat&logo=hexo" title="博客框架为Hexo"></a> <a target="_blank" href="https://butterfly.js.org/"><img src="https://img.shields.io/badge/Theme-Butterfly-6513df?style=flat&logo=bitdefender" title="主题采用butterfly"></a> <a target="_blank" href="https://www.jsdelivr.com/"><img src="https://img.shields.io/badge/CDN-jsDelivr-orange?style=flat&logo=jsDelivr" title="本站使用JsDelivr为静态资源提供CDN加速"></a> <a target="_blank" href="https://vercel.com/ "><img src="https://img.shields.io/badge/Hosted-Vervel-brightgreen?style=flat&logo=Vercel" title="本站采用双线部署,默认线路托管于Vercel"></a> <a target="_blank" href="https://vercel.com/ "><img src="https://img.shields.io/badge/Hosted-Coding-0cedbe?style=flat&logo=Codio" title="本站采用双线部署,联通线路托管于Coding"></a> <a target="_blank" href="https://github.com/"><img src="https://img.shields.io/badge/Source-Github-d021d6?style=flat&logo=GitHub" title="本站项目由Gtihub托管"></a> <a target="_blank" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img src="https://img.shields.io/badge/Copyright-BY--NC--SA%204.0-d42328?style=flat&logo=Claris" title="本站采用知识共享署名-非商业性使用-相同方式共享4.0国际许可协议进行许可"></a></p> |
对于部分人需要写 ICP 的,也可以写在custom_text
里。
custom_text: <a href="icp链接"><img class="icp-icon" src="icp图片"><span>备案号:xxxxxx</span></a> |
右下角按钮
简繁转换
修改主题配置文件_config.butterfly.yml
。
translate: |
夜间模式
修改主题配置文件_config.butterfly.yml
。
# dark mode |
v2.0.0 开始增加一个选项,可开启自动切换light mode 和 dark mode。
autoChangeMode: 1 跟随系统而变化,不支持的浏览器/系统将按照时间晚上6点到早上6点之间切换为 dark mode。
autoChangeMode: 2 只按照时间 晚上6点到早上6点之间切换为 dark mode,其余时间为light mode。
autoChangeMode: false 取消自动切换。
阅读模式
阅读模式下会去掉除文章外的内容,避免干扰阅读。只会出现在文章页面,右下角会有阅读模式按钮。
修改主题配置文件_config.butterfly.yml
。
readmode: true |
侧边栏设置
侧边排版
可自行决定哪个项目需要显示,可决定位置,也可以设置不显示侧边栏。
修改主题配置文件_config.butterfly.yml
。
aside: |
访问人数(UV 和 PV)
详细信息请查看busuanzi官方网站。
修改主题配置文件_config.butterfly.yml
。
busuanzi: |
运行时间
网页已运行时间。
runtimeshow: |
最新评论
v3.1.0 以上支持。如果未配置任何评论,前先不要开启该功能。
最新评论只会在刷新时才会去读取,并不会实时变化。
由于 API 有 访问次数限制,为了避免调用太多,主题默认存取期限为 10 分鐘。也就是説,调用后资料会存在 localStorage 里,10分鐘内刷新网站只会去 localStorage 读取资料。 10 分鐘期限一过,刷新页面时才会去调取 API 读取新的数据。( 3.6.0 新增了 storage 配置,可自行配置缓存时间)。
# Aside widget - Newest Comments |
网站背景
# 图片格式 url(http://xxxxxx.com/xxx.jpg) |
如果你的网站根目录不是’/‘,使用本地图片时,需加上你的根目录。
例如:网站是https://yoursite.com/blog
,引用一张img/xx.png图片,则设置background为 `url(/blog/img/xx.png)
打字效果
传送门:activate-power-mode。
修改主题配置文件_config.butterfly.yml
。
# Typewriter Effect (打字效果) |
footer 背景
修改主题配置文件_config.butterfly.yml
。
# footer是否显示图片背景(与top_img一致) |
配置的值 | 效果 |
---|---|
留空/false | 显示默认的颜色 |
img链接 | 图片的链接,显示所配置的图片 |
颜色: HEX值 - #0000FF RGB值 - rgb(0,0,255) 颜色单词 - orange 渐变色 - linear-gradient( 135deg, #E2B0FF 10%, #9F44D3 100%) |
对应的颜色 |
true | 显示跟 top_img 一样 |
背景特效
可设置每次刷新更换彩带,或者每次点击更换彩带。详细配置可查看canvas_ribbon。
修改主题配置文件_config.butterfly.yml
。
canvas_ribbon: |
好看的彩带背景,会飘动。
修改主题配置文件_config.butterfly.yml
。
canvas_fluttering_ribbon: |
修改主题配置文件_config.butterfly.yml
。
canvas_nest: |
鼠标点击效果
zIndex
建议只在-1
和9999
上选。-1
代表烟火效果在底部。9999
代表烟火效果在前面。
修改主题配置文件_config.butterfly.yml
。
fireworks: |
修改主题配置文件_config.butterfly.yml
。
# 点击出現爱心 |
修改主题配置文件_config.butterfly.yml
。
# 点击出现文字,文字可自行修改 |
自定义字体和字体大小
全局字体
修改主题配置文件_config.butterfly.yml
中的font-family
属性即可,如不需要配置,请留空。
# Global font settings |
Blog 标题字体
修改主题配置文件_config.butterfly.yml
中的blog_title_font
属性即可,如不需要配置,请留空。
如不需要使用网络字体,只需要把font_link留空就行。
# Font settings for the site title and site subtitle |
网站副标题
可设置主页中显示的网站副标题或者喜欢的座右铭。
修改主题配置文件_config.butterfly.yml
中的subtitle
。
# Site |
预览效果见本站主页:唐志远の博客。
页面加载动画preloader
主题版本 < 5.0
当进入网页时,因为加载速度的问题,可能会导致top_img图片出现断层显示,或者网页加载不全而出现等待时间,开启preloader后,会显示加载动画,等页面加载完,加载动画会消失。
# 加载动画 Loading Animation |
主题版本 >= 5.0
preloader 设置更改,增加 pace.js 加载动画条
# 加载动画 Loading Animation |
字数统计
- 安装插件:在你的博客根目录,打开cmd命令窗口执行
npm install hexo-wordcount --save
。 - 开启配置:修改主题配置文件
_config.butterfly.yml
中的wordcount
。
wordcount: |
图片大图查看模式
只能开启一个。
如果你并不想为某张图片添加大图查看模式,你可以使用 html 格式引用图片,并为图片添加no-lightbox
class 名,例如:<img src="xxxx.jpg" class="no-lightbox">
。
修改主题配置文件_config.butterfly.yml
中fancybox
属性。
# fancybox http://fancyapps.com/fancybox/3/ |
修改主题配置文件_config.butterfly.yml
中medium_zoom
属性。
medium_zoom: true |
Pjax
当用户点击链接,通过 ajax 更新页面需要变化的部分,然后使用 HTML5 的 pushState 修改浏览器的 URL 地址。
这样可以不用重复加载相同的资源(css/js), 从而提升网页的加载速度。
# Pjax [Beta] |
使用 pjax 后,一些自己DIY的js可能会无效,跳转页面时需要重新调用,请参考Pjax文档。
Inject
v2.3.0以上支持。
如想添加额外的 js/css/meta 等等东西,可以在 Inject 里添加,head(</body>
标签之前), bottom(</html>
标签之前)。
# Inject |
CDN
建议先
ping
一下cdn.jsdelivr.net
,如果能ping
通,可忽略此步。
自从jsd官方的ICP被吊销以后,很多资源都无法访问,请自行配置CDN,配置后请确认链接是否能访问。
为了博客能正常访问,本文列出几种解决方法(防止cdn.jsdelivr.net
再次出现幺蛾子)。
注意:如果下面三种 CDN 也存在问题,可以找一找国内的一些 CDN ,如知乎、字节、饿了么等。
可以参考如下教程:
常用CDN网站汇总
张洪:Butterfly CDN链接更改指南,替换jsdelivr提升访问速度
安知鱼:目前可用cdn整理
将主题配置文件_config.butterfly.yml
中的https://cdn.jsdelivr.net
替换成下面任意一种CDN即可。
https://fastly.jsdelivr.net
https://testingcf.jsdelivr.net
https://gcore.jsdelivr.net
另外将上图中所出现的https://cdn.jsdelivr.net
文件换成可用的CDN。
Valine评论相关(如果用的不是Valine,可跳过此步):
node_modules\hexo-theme-butterfly\layout\includes\third-party\newest-comments\valine.pug
node_modules\hexo-theme-butterfly\layout\includes\third-party\newest-comments\leancloud.pug
电子时钟相关(如果未引用电子时钟,可跳过此步):
node_modules\hexo-butterfly-clock\index.js
node_modules\hexo-butterfly-clock\lib\clock.css
其他文件也按照同样的方法修改即可。
- 前往博客根目录,打开cmd命令窗口执行如下命令安装 gulp 及 gulp-replace。
npm install gulp-cli -g
npm install gulp -D
npm install --save-dev gulp-replace - 前往博客根目录,创建文件
gulpfile.js
,填写以下代码。const gulp = require('gulp'); //如果之前有gulp相关插件,请删除此行代码
const replace = require('gulp-replace');
gulp.task('templates', async() => {
gulp.src('public/**/*.*')
.pipe(replace('这里填写jsd官方域名', '目标cdn地址'))
.pipe(gulp.dest('public/')), { overwrite: true };
});
gulp.task("default", gulp.parallel('templates')); - 前往博客根目录,打开cmd命令窗口执行
gulp
。gulp