Butterfly博客主题搭建系列:基础教程
Butterfly是一个界面生动,图文交互性强的Hexo主题,借鉴官方文档和其他博主搭建过程我创作了该教程,希望更多的人使用Butterfly来记录自己的生活。
本教程更新于 2022 年 08 月 20 日,教程的内容针对hexo6.2.0 butterfly4.4.0,并且只介绍基础教程
你愿意花时间看,那我愿意尽我所能帮助你
前提
- 你已经安装了Node.js、Git、Typora等工具
- 你已经拥有github账号并且可以本地推送代码到远程仓库
- 你已经了解Hexo博客框架的使用方法了(使用Typora写博客、hexo部署博客)
- 你已经决定好想要优化博客的准备了
更换主题
到hexo根目录打开cmd命令提示符
1 | git clone -b master https://github.com/jerryc127/hexo-theme-butterfly.git themes/butterfly |
如果超时执行另一个命令:
1 | git clone -b master git@github.com:jerryc127/hexo-theme-butterfly.git themes/butterfly |
这两个命令的区别是,一个是使用https协议,另一个使用ssh协议,目前国内访问github会被DNS污染导致访问错误,因此拉取代码会超时,可以使用ssh协议代替https协议克隆代码
在博客根目录打开网站配置文件 _config.yml,修改默认主题:
1 | theme: butterfly |
在博客根目录下复制主题配置文件blog/themes/butterfly/_config.yml
并命名为_config.butterfly.yml
,hexo会将_config.butterfly.yml
覆盖默认主题配置文件,方便我们进行升级操作
本教程没有修改主题源码的操作,请放心食用
在博客根目录下执行:
1 | npm install hexo-renderer-pug hexo-renderer-stylus --save |
hexo三连:
1 | hexo clean && hexo g && hexo s |
我们将博客根目录的配置文件称为_config.yml
,将主题配置文件称为_config.butterfly.yml
基础信息
在_config.yml设置网站资料:
1 | # Site |
在_config.butterfly.yml设置网站页脚:
1 | # Footer Settings |
网站资料参数解释
参数 | 描述 |
---|---|
title | 网站标题 |
subtitle | 网站副标题 |
description | 网站描述 |
keywords | 网站的关键词。支持多个关键词。 |
author | 您的名字 |
language | 网站使用的语言。对于简体中文用户来说,使用不同的主题可能需要设置成不同的值,请参考你的主题的文档自行设置,常见的有 zh-Hans 和 zh-CN 。 |
timezone | 网站时区。Hexo 默认使用您电脑的时区。请参考 时区列表 进行设置,如 America/New_York , Japan , 和 UTC 。一般的,对于中国大陆地区可以使用 Asia/Shanghai 。 |
其中,description
主要用于SEO,告诉搜索引擎一个关于您站点的简单描述,通常建议在其中包含您网站的关键词。author
参数用于主题显示文章的作者。
网站页脚参数解释
参数 | 描述 |
---|---|
since | 建立网站的年份。用于展示站点起始时间,位于页面最底部 |
custom_text | 位于页脚的自定义文本,支持HTML |
copyright | true展示hexo和butterfly的版权信息,false不展示 |
网站副标题
1 | # the subtitle on homepage (主頁subtitle) |
导航菜单
在_config.butterfly.yml设置网站导航菜单:
1 | menu: |
导航页面
有了导航,后面就是建立页面,首先建立下面三个基本页面
其他页面以此类推,不用加type:”xxx”
在根目录cmd,使用以下命令建立标签页:
1 | hexo new page tags |
修改source/tags/index.md:
1 | title: 标签 |
添加type:”xxx”是为了设置内置的标签页,分类页,友情链接,这些页面butterfly自带有,不需要我们单独设置
在根目录cmd,使用以下命令建立分类页:
1 | hexo new page categories |
修改source/categories/index.md:
1 | title: 分类 |
在根目录cmd,使用以下命令建立友链页:
1 | hexo new page links |
修改source/links/index.md:
1 | title: 友链 |
搜索系统
1、安装插件:
1 | npm install hexo-generator-search --save |
2、修改_config.butterfly.yml:
1 | # Local search |
官网注册,创建应用,拿到apikeys
在 hexo 根目录下的_config.yml
配置文件添加以下代码,appId、apiKey、adminApiKey、indexName 根据自己的情况填写
1 | plugins: |
修改 Butterfly 主题的_config.yml
配置文件:
1 | # Algolia search |
友情链接
在Hexo博客目录中的source/_data(如果没有 _data 文件夹,请自行创建),创建一个文件link.yml
1 | - class_name: 友情鏈接 |
404页面
主题内置了一个简单的404页面,可在设置中开启
本地预览时,访问出错的网站是不会跳到404页面的。
如需本地预览,请访问http://localhost:4000/404.html
1 | # A simple 404 page |
社交图标
Butterfly支持 font-awesome v6图标
书写格式 图标名:url || 描述性文字
1 | social: |
图片设置
1 | # Favicon(网站图标) |
1 | # Avatar (头像) |
1 | # The banner image of home page |
可使用我的api接口来生成背景图
1 | https://api.bimg.cc/today #当天必应壁纸 |
1 | # If the banner of page not setting, it will show the top_img |
大图查看
1 | # Lightbox (圖片大圖查看模式) |
图片懒加载
安装hexo-lazyload-image
模块
1 | npm install hexo-lazyload-image --save |
在_config.yml
添加:
1 | lazyload: |
_config.butterfly.yml
配置也有图片懒加载:
1 | # Lazyload (圖片懶加載) |
而且支持懒加载范围自定义和高斯模糊
网站背景
修改_config.butterfly.yml
:
1 | # Background effects (背景特效) |
右下角按钮
繁简转换
简体繁体互换,右下角会有简繁转换按钮。修改_config.butterfly.yml
:
1 | # Bottom right button (右下角按鈕) |
夜间模式
右下角会有夜间模式按钮:
1 | # dark mode |
autoChangeMode
: 1 跟随系统而变化,不支持的浏览器/系统将按照时间晚上6点到早上6点之间切换为 dark mode
autoChangeMode
: 2 只按照时间 晚上6点到早上6点之间切换为 dark mode,其余时间为light mode
autoChangeMode
: false 取消自动切换
阅读模式
阅读模式下会去掉除文章外的内容,避免干扰阅读。只会出现在文章页面,右下角会有閲读模式按钮。
修改_config.butterfly.yml
:
1 | readmode: true |
按钮排序
1 | # Don't modify the following settings unless you know how they work (非必要请不要修改 ) |
侧边栏设置
主页侧边排版
只修改公告以及Github账号即可,其他不用修改
1 | # aside (側邊欄) |
最新评论
主页侧边栏显示最新评论
1 | # Aside widget - Newest Comments |
访问人数 busuanzi
1 | # busuanzi count for PV / UV in site |
网站运行时间
1 | # Time difference between publish date and now (網頁運行時間) |
自定义栏目
参考:https://butterfly.js.org/posts/ea33ab97/
文章设置
文章链接优化
安装 hexo-abbrlink
插件
1 | npm install hexo-abbrlink |
编辑 站点的 _config.yml
文件,找到 permalink
, 改成 permalink: posts/:abbrlink/
重新运行后插件会为每一篇文章生成唯一id并添加到Front-matter。
1 | # URL |
Front-matter
Front-matter 是 markdown 文件最上方以 ---
分隔的区域,用于指定个别档案的变数。
Page Front-matter
用于页面
配置Post Front-matter
用于文章页
配置
如果标注可选
的参数,可根据自己需要添加,不用全部都写在markdown里
写法 | 解释 |
---|---|
title | 【必需】页面标题 |
date | 【必需】页面创建日期 |
type | 【必需】标签、分类和友情链接三个页面需要配置 |
updated | 【可选】页面更新日期 |
description | 【可选】页面描述 |
keywords | 【可选】页面关键字 |
comments | 【可选】显示页面评论模块(默认 true) |
top_img | 【可选】页面顶部图片 |
mathjax | 【可选】显示mathjax(当设置mathjax的per_page: false时,才需要配置,默认 false) |
katex | 【可选】显示katex(当设置katex的per_page: false时,才需要配置,默认 false) |
aside | 【可选】显示侧边栏 (默认 true) |
aplayer | 【可选】在需要的页面加载aplayer的js和css,请参考文章下面的音乐 配置 |
highlight_shrink | 【可选】配置代码框是否展开(true/false)(默认为设置中highlight_shrink的配置) |
写法 | 解释 |
---|---|
title | 【必需】文章标题 |
date | 【必需】文章创建日期 |
updated | 【可选】文章更新日期 |
tags | 【可选】文章标签 |
categories | 【可选】文章分类 |
description | 【可选】文章描述 |
keywords | 【可选】文章关键字 |
comments | 【可选】显示文章评论模块(默认 true) |
top_img | 【可选】文章顶部图片 |
cover | 【可选】文章缩略图(如果没有设置top_img,文章页顶部将显示缩略图,可设为false/图片地址/留空) |
comments | 【可选】显示文章评论模块(默认 true) |
toc | 【可选】显示文章TOC(默认为设置中toc的enable配置) |
toc_number | 【可选】显示toc_number(默认为设置中toc的number配置) |
toc_style_simple | 【可选】显示 toc 简洁模式 |
copyright | 【可选】显示文章版权模块(默认为设置中post_copyright的enable配置) |
copyright_author | 【可选】文章版权模块的文章作者 |
copyright_author_href | 【可选】文章版权模块的文章作者链接 |
copyright_url | 【可选】文章版权模块的文章连结链接 |
copyright_info | 【可选】文章版权模块的版权声明文字 |
mathjax | 【可选】显示mathjax(当设置mathjax的per_page: false时,才需要配置,默认 false) |
katex | 【可选】显示katex(当设置katex的per_page: false时,才需要配置,默认 false) |
aplayer | 【可选】在需要的页面加载aplayer的js和css,请参考文章下面的音乐 配置 |
highlight_shrink | 【可选】配置代码框是否展开(true/false)(默认为设置中highlight_shrink的配置) |
aside | 【可选】显示侧边栏 (默认 true) |
文章置顶
【推荐】hexo-generator-index从 2.0.0 开始,已经支持文章置顶功能。你可以直接在文章的front-matter区域里添加sticky: 1属性来把这篇文章置顶。数值越大,置顶的优先级越大。
1 | title: Butterfly博客搭建(一) |
主页文章节选
因为主题UI的关係,主页文章节选只支持自动节选和文章页description。
在butterfly里,有四种可供选择
description
: 只显示descriptionboth
: 优先选择description,如果没有配置description,则显示自动节选的内容auto_excerpt
:只显示自动节选false
: 不显示文章内容
修改_config.butterfly.yml:
1 | index_post_content: |
description
在front-matter
里添加
文章目录
在文章页,会有一个目录(TOC),修改_config.butterfly.yml
:
1 | # toc (文章目录) |
参数解释
属性 | 解释 |
---|---|
post | 文章页是否显示 TOC |
page | 普通页面是否显示 TOC |
number | 是否显示章节数 |
expand | 是否展开 TOC |
style_simple | 简洁模式(侧边栏只显示 TOC, 只对文章页有效 ) |
代码样式
修改_config.butterfly.yml
:
1 | # Code Blocks (代碼相關) |
代码主题样例展示
主题支持代码复制功能
1 | highlight_copy: true # 是否开启复制按钮 |
true
:显示代码语言
false
:隐藏代码语言
1 | # show the code language |
在默认情况下,代码框自动展开,可设置是否所有代码框都关闭状态,点击>可展开代码
true
全部代码框不展开,需点击>打开false
代码框展开,有>点击按钮none
不显示>按钮
1 | # true: shrink the code blocks |
你也可以在post/page页对应的markdown文件front-matter添加highlight_shrink来独立配置。
当主题配置文件中的 highlight_shrink 设为true时,可在front-matter添加highlight_shrink: false来单独配置文章展开代码框。
当主题配置文件中的 highlight_shrink 设为false时,可在front-matter添加highlight_shrink: true来单独配置文章收缩代码框。
3.7.0 及以上支持
可配置代码高度限制,超出的部分会隐藏,并显示展开按钮。
1 | highlight_height_limit: 200 # unit: px |
注意:
单位是 px,直接添加数字,如 200
实际限制高度为 highlight_height_limit + 30 px ,多增加 30px 限制,目的是避免代码高度只超出highlight_height_limit 一点时,出现展开按钮,展开没内容。
不适用于隐藏后的代码块( css 设置 display: none)
在默认情况下,Hexo 在编译的时候不会实现代码自动换行。如果你不希望在代码块的区域里有横向滚动条的话,那么你可以考虑开启这个功能。
1 | code_word_wrap: true |
1 | # copy settings |
插入图片
在source下新建img/447d,本教程的链接优化为/posts/447d,所以建立和教程链接一样的资源文件夹即可
将要插入的图片放入img/447d/中,md文件则可以写入:
1 |  |
447d是hexo-abbrlink生成的随机字符
本地即可预览该图片
文章锚点
开启文章锚点后,当你在文章页进行滚动时,文章链接会根据标题ID进行替换
(注意: 每替换一次,会留下一个历史记录。所以如果一篇文章有很多锚点的话,网页的历史记录会很多。)
1 | # anchor |
文章分页
设置分页的逻辑
1 | # post_pagination (分頁) |
post_pagination
: 分页开关按钮
post_pagination
: 1代表下一篇显示的是旧文章;2代表下一篇显示的是新文章
文章编辑
在文章标题旁边显示一个编辑按钮,点击会跳转到对应的链接去。
1 | # Post edit |
文章分享
addThis
、sharejs
、addtoany
三个选一个开启
1 | # Share System (分享功能) |
文章过期提醒
可设置是否显示文章过期提醒,以更新时间为基准。
1 | # Displays outdated notice for a post (文章过期提醒) |
limit_day
: 距离更新时间多少天才显示文章过期提醒
message_prev
: 天数之前的文字
message_next
:天数之后的文字
相关文章
相关文章推荐的原理是根据文章tags的比重来推荐
1 | related_post: |
字数统计
1 | # wordcount (字數統計) |
文章打赏
1 | # Sponsor/reward |
文章版权信息
1 | post_copyright: |
博客部署
需要自己提前在代码托管网站建立好仓库
如果想要开启pages,须按规则命名仓库:
- Github:{username}.github.io.git
- Gitee:{username}.git
- 其他请自行百度……
1 | npm install --save hexo-deployer-git |
修改_config.yml
:
1 | # Deployment |
1 | hexo clean && hexo g && hexo d |