使用 Hexo + Buttefly 主题配置个人博客 + 魔改流程记录
环境准备
软件安装
安装git, Node.js, npm
查看是否安装成功:
1 | node -v |
创建github pages仓库
新建一个仓库,取名为[name].github.io
基本安装
新建一个文件夹,比如cmander_site,然后进入之
安装Hexo
1 | npm install -g |
安装完成后初始化和安装所需组件
1 | hexo init # 初始化,注意此时文件夹需要是空的 |
完成后输入经典Hexo三连
1 | hexo clean && hexo generate && hexo server |
默认会在http://localhost:4000 生成一个landscape主题的页面,此时本地博客安装成功。
拉取butterfly仓库
1 | git clone -b master https://github.com/jerryc127/hexo-theme-butterfly.git themes/butterfly |
进入 Hexo 文件夹,修改根目录下的_config.yml:
1 | theme: butterfly |
安装渲染插件
1 | npm install hexo-renderer-pug hexo-renderer-stylus --save |
一个比较推荐的操作是,创建一个_config.buttefly.yml,并复制_config.yml 中的所有内容进去。Hexo 会自动合并二者的内容,且绝大部分的设置以_config.butterfly.yml 为优先,未来可以只在_config.buttefly.yml 中配置。
注:不要把_config.yml 删掉,部分内容仍然需要在这里面配置!
Hexo 常见命令可以参考 这篇文章。
简单配置一下 config 文件:
1 | # Site |
易用性设置
博客文件的生成配置
Hexo的post,使用hexo n "[name]"创建时,是只会在source/post下面生成一个 [name].md的,不便于文章的排序(本地)和查找。为此可以通过修改配置文件的new_post_name来完成。
修改_config.yml:
1 | new_post_name: :year-:month-:day_:title.md # File name of new posts |
再生成文章,就是形如 20140514_name.md 的格式了。
为博客文章生成永久链接
参考 Ordis 的文章 Hexo 博客生成永久链接
Hexo 的默认文章链接是形如: year/:month/:day/:title 格式的。这样会导致生成链接的时候 title 生成一大串,如果是中文标题的博客文章就更难受了,而且几乎没有鲁棒性可言。
因此这里安装一个插件,通过一些方式为每篇文章生成短链接,只要不改变 footer-matter 的 id 值,则文章链接就不会变化。
1 | ## 安装插件 |
再在 config 文件下增加以下内容:
1 | ## abbrlink config |
最后每篇文章对应的的链接就很短了。
配置 Front-matter
参考 Jerry 的文章 Butterfly 安装文档 (二) 主题页面
Front-matter 是 markdown 文件最上方以 — 分隔的区域,用于指定个别档案的变数。
- Page Front-matter 用于页面配置,如 /_posts/about, /_posts/categories 等页面
- Post Front-matter 用于文章页配置,就是具体的博文。
如何一劳永逸搞定 Front-matter
在网站本地根目录下面找到 scaffolds 文件夹,下有 page.md, post.md,按照下面的指示和配置文件修改即可。
本站使用 mathjax 渲染,因此 katex 不做设置,复制时还请注意。
Page Front-matter
1 | --- |
栏目 | 是否必要? | 解释 |
---|---|---|
title | yes | 标题 |
date | yes | 创建日期 |
type | yes | 标签,分类,友链必须配置 |
updated | no | 页面更新日期 |
comments | no | 评论模块,默认 true |
description | no | 页面描述 |
keywords | no | 页面关键词,用于链接 index 和 category? |
top_img | no | 页面顶部图片 |
mathjax | no | 使用 mathjax 渲染公式,仅当 config 中 mathjax.per_page:false 时才需要按需配置,默认 false |
katex | no | 使用 katex 渲染公式,仅当 config 中 katex.per_page:false 时才需要按需配置,默认 false |
aside | no | 显示侧边栏,默认 true |
aplayer | no | 在需要的页面加载 aplayer 的 js 和 css |
highlight_shrink | no | 配置代码框是否展开,默认为 config 中 highlight_shrink 的配置 |
random | no | 友情链接是否随机排序,默认 false |
Post Front-matter
1 | --- |
栏目 | 是否必要? | 解释 |
---|---|---|
title | yes | 标题 |
date | yes | 创建日期 |
updated | no | 更新日期 |
tags | no | 文章标签 |
categories | no | 文章分类 |
keywords | no | 文章关键词 |
description | no | 文章描述 |
top_img | no | 文章顶部图片 |
comments | no | 评论模块,默认 true |
cover | no | 文章缩略图,若未设置 top_img 则文章顶部显示缩略图,可设为 false / 图片地址 / 留空 |
toc | no | 显示文章目录,默认为设置中的 toc.enable 设置 |
toc_number | no | 显示 toc_number,默认为设置中 toc.number 设置 |
toc_style_simple | no | 显示目录简洁模式 |
copyright | no | 显示文章版权模块,默认为设置中 post_copyright.enable 设置 |
copyright_author | no | 版权模块的 作者 |
copyright_author_href | no | 版权模块的 作者链接 |
copyright_url | no | 版权模块的 文章链接 |
copyright_info | no | 版权模块的 版权声明 |
mathjax | no | 使用 mathjax 渲染公式,仅当 config 中 mathjax.per_page:false 时才需要按需配置,默认 false |
katex | no | 使用 katex 渲染公式,仅当 config 中 katex.per_page:false 时才需要按需配置,默认 false |
aplayer | no | 在需要的页面加载 aplayer 的 js 和 css |
highlight_shrink | no | 配置代码框是否展开,默认为 config 中 highlight_shrink 的配置 |
aside | no | 显示侧边栏,默认 true |
abcjs | no | 加载 abcjs,仅当设置中 abcjs.perpage:false 时才需要按需配置,默认 false |
主题配置(施工中)
参考竹山一叶的 Hexo 博客 Butterfly 主题配置
导航栏
1 | menu: |
标签页,分类页
标签页配置
1 | hexo new page tags |
打开刚才的指令生成的 source/tag/index.md 文件,并按下面格式修改
1 | --- |
类似地,分类页配置
1 | hexo new page categories |
打开 source/categories/index.md,并按下面格式修改:
1 | --- |
新建其他页面
以新建一个笔记页Notes为例
在config_butterfly的menu部分新增:
1 | - 笔记 || /notes/ || iconfont icon-5 |
图标替换见“网站更换图标库到Iconfont”。
然后新建notes文件夹
1 | hexo new page notes |
Hexo会使用 scaffolds/page.md生成一个文件夹 notes,和配套静态文件 index.md。
修改index.md中的Front-matter 中的type: “notes”
网站图标和头像
1 | # Image |
社交图标
修改themes/butterfly/_config.yml:(不知道只修改butterfly是否可以)
1 | # Social Settings (社交圖標設置) |
网站更换图标库到Iconfont
Butterfly默认使用FontAwesome的免费图标。这个网站提供很多免费的矢量图标,但是总量和丰富程度有限,部分情况下需要更换其他图标。这里介绍一个使用阿里巴巴的iconfont站点的免费矢量图的流程。
- 首先去iconfont注册一个账号,然后按需搜索需要的图标。鼠标悬停在图标上点击购物车,将图标加入购物车。然后点击页面右上购物车图标,点击“添加至项目”,在“加入项目”的框右上角有一个文件夹按钮,点击之新建一个项目。
- 添加完项目后,网站会自动跳转到项目详情页面,点击“项目设置”——“暂无代码,点击生成”,网站生成css链接,复制之;
- 打开themes/butterfly/_config.yml,找到Inject配置,按要求添加刚才的css链接:
1 | # Inject |
- 回到默认的config.butterfly.yml,找到menu设置,按需更改。图标使用格式为 iconfont [图标名],其中图标名在网站的项目详情页,鼠标悬浮在图标上即可复制。
字数统计(有误)
1 | post_meta: |
代码渲染主题更改和代码框展开
在themes/butterfly/_config.yml 中修改,在_config.butterfly新增,默认为light
1 | highlight_theme: darker # darker / pale night / light / ocean / mac / mac light / false |
代码框展开,复制一下内容至_config.butterfly.yml:
1 | highlight_height_limit: 300 # unit: px |
Hexo 使用 Mathjax引擎渲染数学公式
参考了Hexo渲染数学公式一文
更换渲染引擎
1 | # 卸载原来的 |
配置引擎
1 | cd [root_file]/node_modules/kramed/lib/rules/inline.js |
更改原本的11行和20行
1 | //11 escape: /^\\([\\`*{}\[\]()#$+\-.!_>])/, |
在主题中开启Mathjax
config文件中新增:
1 | # MathJax Support |
在文章中使用Mathjax
1 |
|
Hexo 配置本地搜索
安装搜索引擎
1 | npm install hexo-generator-search --save |
_config.butterfly.yml 新增
1 | # Local search |
_config.yml 新增
1 | # 添加本地搜索 |
Hexo 引入访问者地图
参考添加访客地图
注意,本地图是按照ip地址定位的
从第三方网站获取地图代码
在clustrmaps官网注册账号,在下面找到website widget,输入 Github Pages 网址,点击 Get Map Widget。
网站提供平面地图 Map Widget 和 球形地图 Globe Widget,这里选择球形地图。
点击 Select,就创建好了。之后只需要复制到博客就行。
引入至 Hexo
- 在themes\butterfly\layout\includes\widget中新建card_map.pug文件
1 | .card-widget.card-map |
- 修改themes\butterfly\layout\includes\widget\index.pug 文件,在需要的位置插入下面的代码
1 | !=partial('includes/widget/card_map', {}, {cache: true}) |
- 在themes\butterfly\_config.yml中找到 card_webinfo 下面添加一行card_map: true
Hexo插入少量图片
对于不同位置的图片,建议使用不同方法(一般来说是图床)存放和引用。
文章内图片:安装特定依赖,不同文件夹分别存放
config 和config.butterfly修改:
1 | # post_asset_folder: false |
然后安装依赖 hexo-asset-image
1 | npm install hexo-asset-image --save |
此时重新在命令行执行hexo n "blabla"的时候,会在_posts下面生成一个同名文件夹。图片放在里面即可,引用时按照下面的语法即可
1 | ![图片名](文件夹名/图片名.后缀) |
文章头图:直接丢到source下面
在source下面新建一个专门存放图片的文件夹,比如pic。将图片存放进去,然后如下正常使用markdown语法引用即可。注意一定是/pic起手,不要丢斜杠。
1 | ![img](/pic/xxx.png) |
添加RSS
本文参考面具熊小屋的文章 Hexo butterfly 主题添加 RSS 插件
首先安装插件
1 | npm install hexo-generator-feed --save |
配置根目录_config.butterfly.yml,新增如下内容
1 | feed: |
配置themes\butterfly\_config.yml,新增
1 | rss: /atom.xml |
并在social setting下新增内容
1 | fas fa-rss: https://https://[Blog URL]//atom.xml || RSS || '#eb6c22' |
文章显示自定义简介
在_config.butterfly.yml中新增
1 | # Display the article introduction on homepage |
三种简介策略分别是:
- 按照front matter内容,没有则置空
- 按照front matter中description内容,没有则自动提取文章开头length个字符
- (默认)提取文章开头length个字符
Hexo配置更好的Markdown渲染器(部分无效)
安装
卸载 hexo-renderer-marked,安装hexo-renderer-markdown-it
1 | npm un hexo-renderer-marked --save |
配置
复制下面内容到_config.butterfly.yml
1 | markdown: |
再安装下面三个插件:
1 | npm i markdown-it-checkbox |
施工中…