Hexo
是一个开源的静态网站生成工具,我们通常用它来建立个人静态博客,这里主要记录简单的安装与配置过程,使用的主题是Next
。
Hexo
安装
Hexo
使用Nodejs
,所以应该配置好Nodejs
环境。在任意目录执行以下指令全局安装
hexo
:1
npm install -g hexo-cli
新建博客
1 | hexo init hexo-blog |
启动博客
1 | 生成网站 |
到这一步就可以本地访问一个hello-world
版本的博客了,本地启动的目的是方便我们调整配置后预览效果。
基础配置
站点配置_config.yml
:
1 | title: 白小兔的小小站 |
菜单配置
主题配置_config.yml
1 | menu: |
注意这里的about
、tags
、categories
还需要我们进一步处理下才可以正常展示,新建页面
1 | hexo new page "about" |
则hexo
会在source
文件夹下创建about
、tags
、categories
文件夹,每个文件夹下还会创建一个index.md
文件表示关于页、标签页和分类页,我们分别打开这三个文件,为它们加上type
属性
1 | --- |
重新生成网站,就已经可以看到效果了,我通常直接执行以下代码来进行完整的重新生成
1 | hexo clean && hexo g && hexo s |
这里about
页面留给我们自定义了,tags
和categories
页面会自动归类生成数据的,它们的数据来自我们的文章中设置的属性,如
1 | --- |
这个是写在每篇markdown
文章的顶部,定义文章的一些属性,当然了,这里列出这个主要因为categories
、tags
的分类统计就来自于此。
Next
主题
在hexo-blog
目录下执行以下代码拉取next
主题的仓库
1 | git clone https://github.com/theme-next/hexo-theme-next themes/next |
github
拉取代码可能比较慢,可以直接下载压缩包,再本地解压。
修改hexo-blog
目录下的的_config.yml
文件,将主题指定为next
1 | theme: next |
修改themes/next/_config.yml
文件,将scheme
调整为自己喜欢的排版风格
1 | scheme: Pisces |
此时再次生成博客,启动博客看看效果吧~
本地搜索
安装本地搜索插件
1
npm install hexo-generator-search --save
安装之后,会在站点目录的
public
下创建一个search.xml
文件在站点配置
_config.yml
中添加以下内容1
2
3
4
5search:
path: search.xml
field: post
format: html
limit: 10000path:索引文件的路径,相对于站点根目录
field:搜索范围,默认是 post,还可以选择 page、all,设置成 all 表示搜索所有页面
limit:限制搜索的条目数
在主题配置
_config.yml
中找到以下内容1
2
3
4local_search:
enable: true
trigger: auto
top_n_per_article: 1确保
enable
设成true
top_n_per_article
字段表示在每篇文章中显示的搜索结果数量,设成 -1 会显示每篇文章的所有搜索结果数量。重新部署博客,看看左侧菜单,搜索功能是不是已经有了?赶快试试吧~
永久链接
安装
hexo-abbrlink
hexo
默认提供的方案是使用年/月/日/标题
,每次更改文章题目或者变更文章发布时间,在默认设置下,文章链接都会改变,不利于搜索引擎收录,也不利于分享,唯一永久链接才是更好的选择。这里使用
hexo-abbrlink
插件来完成这项工作,它的原理是对标题
+时间
进行md5
然后再转base64
,保存在front-matter
中。首先是注册
before_post_render
钩子,然后取出来abbrlink
这个属性看是否存在,存在的就不管了,否则就生成连接。
其中使用了nodejs
自带的crypto
模块来获取md5
校验值,用hexo-front-matter
来转换front-matter
,然后用hexo-fs
来保存文件。1
npm install hexo-abbrlink --save
修改站点配置
_config.yml
的permalink
1
2
3
4
5permalink: posts/:abbrlink.html
# abbrlink config
abbrlink:
alg: crc32 # 算法:crc16(default) and crc32
rep: dec # 进制:dec(default) and hex不同算法和进制生成不同的格式如下:
1
2
3
4
5
6
7
8crc16 & hex
https://post.zz173.com/posts/66c8.html
crc16 & dec
https://post.zz173.com/posts/65535.html
crc32 & hex
https://post.zz173.com/posts/8ddf18fb.html
crc32 & dec
https://post.zz173.com/posts/1690090958.html
如果配置了这个插件后,生成的文章链接都变成undefined,可先执行
hexo clean清除掉以前生成的文章缓存,然后
hexo g`重新渲染应该就OK了。
标签图标
修改主题配置themes/next/_config.yml
1 | tag_icon: fa-tag |
丝带背景
为next
主题安装canvas-ribbon
依赖库
1 | cd themes/next |
修改主题配置themes/next/_config.yml
1 | canvas_ribbon: |
作者图像
修改主题配置/themes/next/_config.yml
1 | avatar: /images/author.jpg |
捐赠入口
修改主题配置_config.yml
,二维码图片自备放入主题source
的images
文件夹
1 | reward_settings: |
版权文案
修改themes/next/_config.yml
文件
1 | footer: |
静态资源
hexo-blog
目录下安装插件hexo-neat
1
npm install hexo-neat --save
站点配置
_config.yml
添加1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21# hexo-neat
# 博文压缩
neat_enable: true
# 压缩html
neat_html:
enable: true
exclude:
# 压缩css
neat_css:
enable: true
exclude:
- '**/*.min.css'
# 压缩js
neat_js:
enable: true
mangle: true
output:
compress:
exclude:
- '**/*.min.js'
- '**/index.js'
站点地图
为了方便搜索引擎收录,提高SEO
,sitemap
肯定需要的。
安装插件hexo-generator-sitemap
,hexo-generator-baidu-sitemap
。
1 | npm install hexo-generator-sitemap --save |
修改站点配置_config.yml
, 添加如下内容:
1 | sitemap: |
sitemap
文件需要手动提交给搜索引擎,比较麻烦,我这个站点搜索引擎是否收录对我都一样,这里仅做下实践验证。
添加robots.txt
这也是提高SEO
的,设置搜索引擎可以抓取哪些,不需要抓取哪些内容。
在themes/next/source
目录下添加robots.txt
:
1 | * : |
如果使用https,将http换成https;将your-website-domain
换成自己的域名。
nofollow
插件
减少出站链接能够有效防止权重分散,hexo
有很方便的自动为出站链接添加nofollow
的插件。
1 | npm install hexo-autonofollow --save |
在站点配置文件_config.xml中添加如下配置:
1 | nofollow: |
enable - 是否启用插件,默认值为
true
field - 插件的处理范围,默认值为
site
,可选post
或site
site
- 处理全站所有页面post
- 仅处理文章内容
exclude - 域名白名单,不同的子域名视为不同的域名(如
www
)exclude1.com
不包括www.exclude1.com
或en.exclude1.com
相关文章
站点下安装hexo-related-popular-posts
插件:
1 | npm install hexo-related-popular-posts --save |
主题配置_config.yml
搜索related_posts
修改:
1 | related_posts: |
RSS
支持RSS
订阅,先安装插件hexo-generator-feed
。
1 | npm install hexo-generator-feed --save |
站点配置文件_config.yml
添加以下内容:
1 | # Extensions |
上面这一步就已经完成RSS
的功能了,但是我们希望在页面上展示一个图标提醒别人,可以在主题配置文件_config.yml
中将follow_me
下的RSS
注释去掉:
1 | RSS: /atom.xml || fa fa-rss |
这样出来的效果是在每篇文章下面会有个RSS
,感觉这样不太好,所以将它修改到边栏中去
删除文章底部的
RSS
(整个follow me
设置都删除)1
2
3
4
5
6# theme/next/layout/_macro/post.swig
# 删除以下代码
{%- if theme.follow_me %}
{{ partial('_partials/post/post-followme.swig', {}, {cache: theme.cache.enable}) }}
{%- endif %}修改
RSS
样式1
2
3
4
5
6# theme/next/layout/_partials/post/post-followme.swig
<div class="followme"> # 修改为 <div class="">
<span>{{ __('follow_me.welcome') }}</span> # 删除这一行
<div class="social-list"> # #修改为 <div class="">
# 省略部分源码添加
RSS
到侧边栏(其实就是整个的follow me
)1
2
3
4# theme/next/layout/_partials/sidebar/site-overview.swig
{%- if theme.follow_me %}
{{ partial('_partials/post/post-followme.swig', {}, {cache: theme.cache.enable}) }}
{%- endif %}
代码块复制
目前 Next 主题已经支持代码块复制功能,在配置文件_config.yml
中设置 copy_button
即可。
1 | copy_button: |
字数统计&阅读时长
在hexo-blog
目录下安装插件
1 | npm install hexo-wordcount --save |
修改主题配置文件_config.yml
1 | post_wordcount: |
评论
Valine
是一个基于LeanCloud
的无后端评论系统,最新版的next
似乎已经进行了集成,所以我们只需要找到主题配置中的以下内容进行修改即可,注意需要先去LeadCloud
新建应用,获取appid
和appKey
填写在配置中。
1 | valine: |
进行以上配置后,我们就已经为自己的博客接入了评论系统,但是仔细观察会发现右下角有个Powered by Valine
的块,影响美观,经观察是一个class
包含vpower
的div
元素。我们可以找到themes\next\source\css\_common\scaffolding\comments.styl
文件在comments
下加入对vpower
的隐藏代码
1 | .comments { |
其他
下面的内容为我使用早期版本的
hexo
与next
主题使用的改动,本次重新建立博客站点未用到,为了防止以后用到,以下内容仅作备份参考。
修改
next
主题中Pisces
风格的页面宽度如果我们选择了
next
主题,并且使用Pisces
风格,在高分辨率屏幕上就会发现我们的页面宽度显得有些窄。编辑
themes\next\source\css\_schemes\Pisces\_layout.styl
,在底部添加如下代码:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33header{ width: 90% ; }
header.post-header {
width: auto ;
}
.container .main-inner { width: 90%; }
.content-wrap { width: calc(100% - 260px); }
.header {
+tablet() {
width: auto ;
}
+mobile() {
width: auto ;
}
}
.container .main-inner {
+tablet() {
width: auto ;
}
+mobile() {
width: auto ;
}
}
.content-wrap {
+tablet() {
width: 100% ;
}
+mobile() {
width: 100% ;
}
}设置背景图片
如果希望给博客设置一个背景图片,可在
themes/next/source/css/_custom/custom.styl
文件中添加以下css
:1
2
3
4
5
6
7
8
9
10
11
12@media screen and (min-width:1200px) {
body {
background-image:url(/images/background.jpg);
background-repeat: no-repeat;
background-attachment:fixed;
background-position:50% 50%;
background-size:cover;
}
#footer a {
color:#eee;
}
}当然,你得把背景图片放在
themes/next/source/images
中。