什么是 Hexo?
Hexo 是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页。
搭建过程或许有那么点小繁琐~~(其实挺麻烦的)~~,但一旦搭建完成,发表博文是极简单,极舒服的。 只需要几个简单命令,你就可以完成一切。
$ hexo n #写文章
$ hexo g #生成
$ hexo d #部署,可与hexo g合并为 hexo d -g
前期准备
- 已安装git
- 已有github账号
- 已有node.js
安装npm
可以直接apt安装,也可以去官网下载node.js包,然后解压安装。在此用apt安装:
$ sudo apt-get install npm
因为npm的源在国外,没翻墙的话速度会很慢(感觉翻墙了效果也不是很大),可以改成国内的淘宝源
$ npm config list #查看配置
$ sudo npm config set registry https://registry.npm.taobao.org #换源
hexo本地搭建
安装hexo
所有必备的应用程序安装完成后,即可使用 npm 安装 Hexo。一条命令即可解决:
$ sudo npm install -g hexo-cli
如果 npm 安装 hexo 失败, 则很有可能是权限问题, 或者npm与node的版本不兼容(很少出现)
Hexo初始化
创建一个目录用来作为你的 blog 目录,并在该目录中进行Hexo的初始化:
$ mkdir <folder>
$ cd <folder>
$ hexo init
也可以直接
$ hexo init <folder>
等一会儿如果出现橙色的 WARN 没关系,只要不出现红色的 ERROR 就行
执行后,可能会出现如下的警告,安装依赖项失败,则要手动运行 npm 安装
WARN Failed to install dependencies. Please run 'npm install' manually!
手动运行安装(直接输入即可)
$ npm install
这样,hexo会帮你在该目录下生成相应的各种文件:
.
├── _config.yml
├── package.json
├── scaffolds
│ ├── draft.md
│ ├── page.md
│ └── post.md
├── source
| ├── _drafts
| └── _posts
└── themes
└── landscape
至此,完成了Hexo的初始化
本地启动
Hexo 3.0 把服务器独立成了个别模块,但要先安装 hexo-server 才能使用。
$ sudo npm install hexo-server --save
之后就可以进行本地的预览了
$ hexo g #等同于hexo generate, 生成静态文件
$ hexo s #等同于hexo server, 在本地服务器运行
指定端口
$ hexo s -p 2333
至此,Hexo博客已经在本地成功搭建
停止:ctrl+c
将本地Hexo博客推送到GithubPages
创建仓库
仓库名为:<Github账号名称>.github.io,github会自动将它识别为Github Pages所属的仓库,并开启博客的站点链接
安装 hexo-deployer-git 插件
$ sudo npm install hexo-deployer-git --save
修改站点目录下的_config.yml
在文件末尾修改为:
# Deployment
## Docs: https://hexo.io/docs/deployment.html
deploy:
type: git
repo: git@github.com:<Github账号名称>/<Github账号名称>.github.io.git
branch: master
注:上面的地址可以是ssh地址,也可以是https地址
添加SSH key
生成ssh密钥
输入以下命令,回车三下(默认值)即可:
$ ssh-keygen -t rsa -C "邮箱地址"
将密钥添加到 github
-
打开github –> Settings –> SSH and GPG keys –> New SSH key
-
复制密钥文件内容(路径:
~/.ssh/id_rsa.pub),粘贴到 New SSH Key 打开的 “Key” 之中即可,title 可随意,可不填。 -
测试是否添加成功,在命令行依次输入以下命令,返回
You’ve successfully authenticated即成功:$ ssh -T git@github.com
推送到GithubPages
输入以下命令, 返回INFO Deploy done: git即成功推送
$ hexo g
$ hexo d
等待1分钟左右,访问博客地址即可: https://<Github账号名称>.github.io
可以看到初始便有一篇《Hello world》文章
错误分析
- 当遇到部署出错或部署后的网页存在偏差时,建议先清理下缓存:
hexo clean
我遇到 Permission denied 问题,可能你们也会踩到这个坑
还有这一篇博文关于错误分析罗列得比较全
hexo指令
hexo help #查看帮助
hexo init #初始化一个目录
hexo clean #清除缓存,最好每次执行命令前先清理缓存
hexo generate #生成网页,可以在 public 目录查看整个网站的文件
hexo server #本地预览,'Ctrl+C'关闭
hexo deploy #部署.deploy目录
hexo new "postName" #新建文章
hexo new page "pageName" #新建页面
基础配置
配置站点信息
更改标题,作者,语言等
修改站点配置文件(_config.yml),以博主的设置为例
# Site
title: 玄著
subtitle: 记录点滴 #副标题,在主标题之下显示
description: Coding everyday, change everyday #描述,在”作者“之下显示
keywords: #站点关键字,可用于被搜索引擎捕获
author: Shadow Zhang #作者名
language: zh-CN #语言,简体中文,更多请见官方文档
timezone: #时区
这样就算成自己的博客了2333
写博文
新建文章
执行命令,生成指定名称的文章至source/_posts/postName.md
$ hexo new [layout] "postName"
其中layout是可选参数,默认值为post。有哪些 layout 呢,请到 scaffolds 目录下查看,这些文件名称就是 layout 名称。当然你可以添加自己的 layout,方法就是添加一个文件即可,同时你也可以编辑现有的 layout,比如 post 的 layout 默认是scaffolds/post.md
Front-matter
一开始新建起来的是这样的
title: postName #文章标题,可以修改,但最好不要改,后面会说到
date: 2019-04-13 19:43:07 #文章生成时间,可以任意修改
`tags`: #文章标签,可为空
---
这里开始使用markdown格式输入你的正文。
多个标签(yaml格式)
'tags':
- python
- linux
我们可以添加其它参数,如更新时间,分类等,详见官方文档
文章部分显示设置
打开主页,我们会发现主页显示的文章都是整篇显示的,这样子不太符合我们的需求。
<!-- more -->方法
通常情况下,在文章中可以使用 <!--more-- > 手动进行截断,这是Hexo提供的方式。这种方式可以精确控制需要显示的摘录内容,也可以让 Hexo 中的插件更好地对文章进行识别,比如markdown的显示。
使用:中间不留空格。在需要的地方插入 <!--more-- > 即可。
其它方法
除了Hexo提供的传统方法,大多主题都提供有其它的方式,比如 NexT 主题,提供了另外两种方式:
- 在文章的 front-matter 中添加 description,输入文章摘录即可
- 自动形成摘要,将主题配置中的
"auto_excerpt项,改为true即可
auto_excerpt:
enable: true
length: 150 #默认截取的长度为,可以自行设定
更改主题
网上主题有很多,前人栽树,后人乘凉,我们只要选择一个适合自己的主题即可。可以查看主题列表,但是更多的主题未被官方收录。
我选择的主题是NexT,简洁美观,有三种外观,并且现在已经更新到了v7.1了,内部已经集成了很多模块,可以很方便地实现一些动能而无需扒前端代码(卑微)。另外还有其它人气比较高的主题,诸如:material,pacman,modernist,yilia,indigo。不多说,进入正题。
更换主题其实很简单,只要克隆主题——更改设置,即可,简单吧,呵呵,但实践起来还是会遇到麻烦
克隆主题
进入该主题的github仓库,比如Next。不过可能会遇到一个主题有两个仓库的情况,比如next还有一个仓库,但是看它的发行版本,只有v5.14,并也宣告该仓库已停止维护。所以下载哪个,看各自的版本吧。
在hexo顶级目录下,克隆到 themes 目录
$ git clone https://github.com/theme-next/hexo-theme-next themes/next
可能在克隆过程中会因为速度过慢而失败,(此坑已踩,9kb/s…),解决办法参考此文
启用主题
打开站点配置文件(_config.yml), 找到 theme 字段, 并将其值更改为 next
theme: next
更改样式
NexT有四种模式(其实只有三种,第三和第四个差不太多),直接更改主题配置文件(themes/next/_config.yml)的 scheme 参数即可
# Schemes
#scheme: Muse
#scheme: Mist
#scheme: Pisces
scheme: Gemini
然后hexo s即可预览效果
主题优化(基于next)
添加「标签」和「分类」页面
(以添加标签页面为例)
新建标签页面
$ hexo new page tags
编辑刚新建的页面,将页面的类型设置为 tags ,主题将自动为这个页面显示标签页。文件内容如下:
title: tags
date: 2019-04-13 16:31:39
type: "tags"
---
在菜单中添加链接。编辑 主题配置文件 , 添加 tags 到 menu 中
menu:
home: / || home
#about: /about/ || user
tags: /tags/ || tags
#categories: /categories/ || th
archives: /archives/ || archive
#schedule: /schedule/ || calendar
#sitemap: /sitemap.xml || sitemap
#commonweal: /404/ || heartbeat
添加“分类”或其它的菜单同理,只需把 tags 改为 categories 或其它即可。
若只是修改了主题配置文件(此坑亲测),那么点开 tags 链接会出现这样的画面:

添加头像
在themes/next/_config.yml件中搜索 avatar :
# Sidebar Avatar
avatar:
# In theme directory (source/images): /images/avatar.gif
# In site directory (source/uploads): /uploads/avatar.gif
# You can also use other linking images.
url: /uploads/avatar.jpg
# If true, the avatar would be dispalyed in circle.
rounded: true # true为圆形,false为方形
# The value of opacity should be choose from 0 to 1 to set the opacity of the avatar.
opacity: 1 # 不透明度,0-1,0为透明
# If true, the avatar would be rotated with the cursor.
rotated: false # true为旋转
头像图片可以放在主题目录下,也可以放在站点目录下,我选择放在站点目录下。在站点目录的 source 目录中新建 uploads 目录,用来存放头像,url 为图片地址
- 注意:如果图片不是正方形的话,那么 rounded 参数设为 true 的话会变成椭圆形哦(亲测..)
返回文章顶部并显示当前浏览进度
修改themes/next/_config.yml,把 false 改为 true:
# Back to top in sidebar
b2t: true # 返回文章顶部
# Scroll percent label in b2t button
scrollpercent: true # 当前浏览进度
侧边栏社交小图标设置
打开主题配置文件_config.yml,搜索 Social,去掉你要添加的图标前面的#号,也可以自己添加其它的社交地址。其格式为:
[社交平台名]: [社交地址] || [图标名称]
social:
GitHub: https://github.com/Shadowmaple || github
E-Mail: mailto:shdwzhang@gmail.com || envelope
#Weibo: https://weibo.com/yourname || weibo
#Google: https://plus.google.com/yourname || google
#Twitter: https://twitter.com/yourname || twitter
#FB Page: https://www.facebook.com/yourname || facebook
#VK Group: https://vk.com/yourname || vk
#StackOverflow: https://stackoverflow.com/yourname || stack-overflow
#YouTube: https://youtube.com/yourname || youtube
#Instagram: https://instagram.com/yourname || instagram
#Skype: skype:yourname?call|chat || skype
# 图标设置
social_icons:
enable: true
icons_only: false #只显示图标
transition: false
GitHub: github
- 图标可以去Font Awesome Icon网站去找,找到后复制名字到相应的位置即可。
文章代码主题设置
NexT 共有5款主题供你选择,默认使用的是 白色的 normal 主题,可选的值有 normal,night, night blue, night bright, night eighties。
在主题文件夹的 _config.yml 配置文件中,定位到 highlight_theme,根据需求修改相应的值即可
添加nest动态背景特效
背景的几何线条是采用的nest效果,一个基于html5 canvas绘制的网页背景效果,非常赞!来自github的开源项目canvas-nest
效果图:

而幸运的是,next主题已经内部集成了这个模块,所以就不用那么麻烦地去改js代码了
主页文章添加边框阴影效果
其它主题都可以这样设置。打开 themes/*/source/css/_custom/custom.styl ,向里面加代码:
// 主页文章添加阴影效果
.post {
margin-top: 0px;
margin-bottom: 60px;
padding: 25px;
-webkit-box-shadow: 0 0 5px rgba(202, 203, 203, .5);
-moz-box-shadow: 0 0 5px rgba(202, 203, 204, .5);
}
修改底部标签样式
修改themes/next/layout/_macro/post.swig文件,搜索rel="tag">#,将#替换成<i class="fa fa-tag"></i>。查看效果:
如果不成功,则把原来的静态资源给清除掉(hexo clean),重启服务。
底部隐藏由Hexo强力驱动、主题–NexT.Mist
在主题配置文件中,搜索 powered,修改 enable 即可
powered:
# Hexo link (Powered by Hexo).
enable: false
# Version info of Hexo after Hexo link (vX.X.X).
version: true
theme:
# Theme & scheme info link (Theme - NexT.scheme).
enable: false
# Version info of NexT after scheme info (vX.X.X).
version: true
更多酷炫效果请见参考文档