基于Butterfly主题的hexo静态博客
前言
基于hexo的静态博客一般分为两部分——静态博客的前端资源,和生成这些资源的设置信息。这里为了管理方便,将这两部分放置在仓库管理的一个仓库的两个分支中。从而可以在任意主机上,通过拉取设置信息所在分支数据,构建编写博客的环境;而将编写好的博客推送到静态博客的前端资源所在的分支中,完成博客的更新。这样子,我们可以在任何主机上,快速同步之前的博客编写环境,并快速更新博客。
安装Git
我们需要通过git与仓库管理网站进行交互,点此镜像链接,进行下载并安装。
我们需要简单配置git,使用如下命令
1 | git config --global user.name `user name` |
这里可以通过教程链接,完成相关git的配置
安装Node.js
Hexo是基于Node.js,因此我们需要安装和配置。首先点此下载链接,下载并安装Node.js。
为了提高安装的效率,我们更换其按镜像源,使用如下命令
1 | npm config set registry "https://registry.npm.taobao.org" && npm config set sass_binary_site=https://npm.taobao.org/mirrors/node-sass/ && npm config set phantomjs_cdnurl=https://npm.taobao.org/mirrors/phantomjs/ && npm config set electron_mirror=https://npm.taobao.org/mirrors/electron/ |
安装Hexo
根据Hexo官网进行相关的安装。
执行如下命令,完成Hexo的安装
1 | npm install hexo-cli -g |
搭建博客生成环境
这里完成最终生成静态博客相关的前端资源的环境。相关的设置信息会被推送到仓库的develop分支,以方便在任何主机上同步该环境。
下面给出同步我的博客环境的命令, 从而快速恢复博客的生成环境,在working_dir目录下执行下列命令1
git clone -b develop git@github.com:JiaweiHawk/jiaweihawk.github.io.git blog && (cd blog; npm install)
初始化工作目录
首先选定一个路径,在该路径下初始化工作目录,不妨记为working_dir,作为该环境的工作目录,命令如下所示
1 | hexo.cmd init `working_dir` |
前面已经介绍,这些设置会被同步到仓库中,因此这里完成仓库初始化,执行如下命令
1 | git init |
这里需要通过编辑working_dir/.gitignore文件,添加该工作目录中那些文件作为无关文件,不会被同步到仓库相关分支中,这里首先填写一部分,内容如下所示
1 | DS_Store |
设置博客配置
这里通过修改working_dir/_config.yml,完成博客的主要配置信息的设置,通过该链接查找大部分配置的可选参数和含义。
修改网站信息
1 | # Site |
这里分别设置了网站名称、网站子名称、网站描述、网站关键词、作者、网站语言和时间区域
修改网页URL信息
1 | # URL |
这里分别为网站url,网页的永久链接形式等
修改博客前端资源目录位置
1 | # Directory |
这里指定博客的资源最终的位置。前面已经说过,该仓库将博客前端资源和配置博客环境的设置分别进行存储,而这里博客前端资源最终会生成在public_dir对应的路径。因此我们通过在working_dir/.gitignore中添加该路径,避免最终同步设置时将生成的博客前端资源一并进行同步,working_dir/.gitignore中默认已经添加该路径。如果设置变化了,需要进行相关的更新。
设置博客主题
如果对于博客默认的主题不是很喜欢,可以按照官网教程,方便的更换博客主题
下载博客主题
这里选择Butterfly主题,其也有官方教程可以进行查看,这里给出本博客的设置。
在working_dir工作目录下,执行如下命令
1 | git clone -b master https://github.com/jerryc127/hexo-theme-butterfly.git themes/butterfly |
这里由于我们会对主题进行相关的设置更改,因此需要避免嵌套git项目,即删除working_dir/themes/butterfly/.git文件即可
指定博客主题
由于Butterfly主题依赖一些第三方插件,因此需要在working_dir工作目录下执行命令安装依赖
1 | npm install hexo-renderer-pug hexo-renderer-stylus --save |
修改working_dir/_config.yml中的theme设置的值
1 | # Extensions |
此时,已经完成了Butterfly主题的使用
修改博客主题细节
类似于前面博客的设置更改,可以通过修改working_dir/themes/butterfly/_config.yml文件,完成博客主题的主要配置信息的设置
设置菜单栏
1 | menu: |
这里通过取消注释,选择菜单栏显示相关的菜单。这里可以参考这位大佬的博客,进行更多的外链的设置显示
该菜单栏引入了主页、归档、标签和分类。其中标签页和分类页需要手动创建,否则会显示无法打开。
首先在working_dir工作目录下,执行如下命令创建标签页
1 | hexo new page tags |
然后修改working_dir/source/tags/index.md文件的type字段
1 | --- |
类似的,在working_dir工作目录下,执行如下命令创建分类页
1 | hexo.cmd new page categories |
然后同样修改working_dir/source/categories/index.md文件的type字段
1 | --- |
设置博客背景图片
1 | # The banner image of home page |
这里修改了主页的默认背景图片,其中index_img
为主页背景图片的外链;对于default_top_img
,其使用本地的图片作为默认的顶部背景图片,该图片的地址为working_dir/themes/butterfly\source/img/background.jpg
设置主页描述
1 | # Display the article introduction on homepage |
即这里根据注释说明,选择模式2,从而在浏览每一篇博客缩略界面时,展示相关信息。
设置代码显示
首先,修改working_dir/_config.yml中的hljs设置的值,将其关闭1
2
3
4
5
6
7highlight:
enable: true
line_number: true
auto_detect: false
tab_replace: ''
wrap: true
hljs: false
接着,修改working_dir/themes/butterfly/_config.yml中如下值,将代码主题设置为mac主题,其余皆为默认设置,使代码更加美观
1 | # Code Blocks (代碼相關) |
设置文章meta显示
1 | post_meta: |
这里设置主页中文件显示标签信息,更方便获取文章信息
设置文章版权
1 | post_copyright: |
这里对于文章版权和许可协议,将其网址解码功能打开,从而正常显示中文网站
设置文章锚点
1 | # anchor |
即开启文章锚点功能,从而每次翻动文章时,其URL都会进行相应的更改,其会在网页中留下历史记录。
设置文章分页按钮
1 | # post_pagination (分頁) |
通过开启文章分页按钮,并设置为模式2,文章结束处会显示上一篇和下一篇文章的跳转信息
设置账户头像
1 | # Avatar (頭像) |
这里通过设置img的路径信息即可。这里的根目录为working_dir/themes/butterfly/source,将头像放置在该位置即可。
设置博客Footer
1 | # Footer Settings |
这里设置了博客角标的显示信息,关闭了copyright内容,并加入了自己的自定义信息
右下角按钮
1 | # Change font size |
这里关闭了简繁转换、阅读模式和夜间模式等按钮
设置侧边栏
1 | # aside (側邊欄) |
这里关闭了隐藏主页的按钮,修改了主页的个人信息部分的设置,并且关闭了公告和网站信卡片,并关闭了诸如访问人数、运行时间和最新评论的无关信息。
设置数学支持
数学公式支持依赖第三方库,因此在 working_dir工作目录下执行如下命令,安装该依赖1
2npm uninstall hexo-renderer-marked --save
npm install hexo-renderer-kramed --save
然后修改working_dir/themes/butterfly/_config.yml中的设置信息1
2
3
4
5mathjax:
enable: true
# true 表示每一页都加载mathjax.js
# false 需要时加载,须在使用的Markdown Front-matter 加上 mathjax: true
per_page: true
最后,还需要修改 working_dir/_config.yml中的设置信息1
2
3
4
5
6
7
8
9# MathJax
kramed:
gfm: true
pedantic: false
sanitize: false
tables: true
breaks: true
smartLists: true
smartypants: true
这里尝试使用如下语句测试其数学公式引用效果1
2这里引用变量`$a_i$`
$$\sigma = x_1 + y_1$$
结果如下所示
这里引用变量
设置置顶系统
置顶系统依赖第三方库,因此在working_dir工作目录下执行如下命令,安装该依赖
1
npm install hexo-generator-index --save
这里通过修改working_dir/_config.yml,完成置顶系统的设置,如下所示
1
2
3
4
5
6
7
8
9# Home page setting
# path: Root path for your blogs index page. (default = '')
# per_page: Posts displayed per page. (0 = disable pagination)
# order_by: Posts order. (Order by date descending by default)
index_generator:
path: ''
per_page: 6
order_by: -date
pagination_dir: page
之后,如果需要置顶一篇博客,则在博客的Front-matter区域添加sticky字段即可——其值越大,对应的博客会被放在越前面,如下所示
1
2
3
4
5
6
7---
title:
date:
tags:
categories:
sticky: 100
---
设置搜索系统
本地搜索依赖第三方库,因此在working_dir工作目录下执行如下命令,安装该依赖
1 | npm install hexo-generator-search --save |
直接修改博客中的主题设置,打开本地搜索
1 | # Local search |
设置页面资源引用
修改博客中的相关设置,打开相对引用功能
1 | post_asset_folder: true |
之后,我们在README中使用如下语句测试其图片引用和文件引用的效果1
2![background](background.jpg)
[background](background.jpg)
则其会引用working_dir/source/_posts/filename
/background.jpg的资源,效果如下图所示
文件链接
设置页面美化
1 | # Beautify (美化頁面顯示) |
这里开启页面美化,自动更改ol、ul和h1-h5的样式
设置页面字体
1 | # Global font settings |
这里修改了全局页面字体的大小设置
设置字数统计
文章字数统计依赖第三方库,因此在working_dir工作目录下执行如下命令,安装该依赖
1 | npm install hexo-wordcount --save |
直接修改博客中的主题设置,打开文章统计,并且关闭网站总字数统计即可
1 | # wordcount (字數統計) |
设置博客部署配置
博客部署同样依赖第三方库,因此在working_dir工作目录下执行如下命令,安装该依赖
1 | npm install hexo-deployer-git --save |
然后,修改working_dir/_config.yml中的deploy配置
1 | # Deployment |
这里就完成了博客部署的设置,具体的部署操作在下面一起讲解
命令
根据最开始所说,仓库中会有两个分支:一个develop分支,用于存储博客环境的设置信息;另一个是deploy分支,其存储用于部署的博客前端资源。其中在设置github pages或其他服务器时,需要注意一下绑定的仓库分支即可
对于更新或拉取博客设置信息,从而快速恢复博客的生成环境,在working_dir目录下执行下列命令
1 | git clone -b develop git@gitee.com:jiaweihawk/jiaweihawk.git blog && (cd blog; npm install) |
对于有新的博客要推送,或更新已有的博客到远程服务器上,则在working_dir目录下执行下列命令
1 | hexo.cmd clean |
这里最后在特别说明一下:在更新博客到远程服务器之前,可以在本地进行查看,执行如下命令,即可在http:\/\/localhost:4000网址进行查看。
1 | hexo.cmd clean |