Hexo是一个快速、简洁且高效的博客框架,使用Hexo可以快速地生成静态博客框架。在框架生成完成后,可以使用任意文本编辑器语法书写博客。我们可以使用Markdown语法书写博客,Hexo在生成博客时会自动将Markdown解析成Html静态页面。
Hexo官网:https://hexo.io/zh-cn/
Hexo中文文档:https://hexo.io/zh-cn/docs/
一、玩法说明
使用Hexo写博客的大致流程如下:
- 生成博客框架
- 配置博客
- 选择自己喜欢的主题
- 配置博客和主题
- 写文章
- 生成博客
- 发布博客到服务器
其中,第1~4步
为前置操作,只需要执行一次。
Hexo只负责生成静态的HTML文件,不提供服务器。如需对外发布博客,我们还需将HTML文件部署到服务器上,可以选择如下的方式:
- Github Pages、GitLab Pages,免费,访问速度较慢。
- Gitee Pages,收费。
- 对象存储服务,如阿里云OSS、腾讯云COS、七牛云OSS等。当访问量大时,需搭配CDN使用,避免因数据回源产生巨额流量费用。
- 自己购买服务器使用Nginx搭建Web服务器。当访问量大时,服务器出口带宽要求较高,此时仍然需要搭配对象存储服务和CDN使用。
二、生成博客框架
2.1 环境准备
在搭建博客框架之前,确保电脑上已经安装如下软件(建议安装最新版本的Node.js,这样可以确保兼容最新版本的Hexo):
- Node.js
- Git
2.2 安装Hexo
在所有必备的应用程序安装完成后,即可使用 npm 全局安装 Hexo工具:
1 | npm install -g hexo-cli |
2.3 生成博客框架
安装 Hexo 完成后,在指定文件夹下执行如下命令,Hexo 将会在
1 | hexo init <folder> |
如果遇到网络错误等问题,请排除是否因为访问国外域名失败导致,可以尝试将npm源切换到国内,参考: NPM和Yarn设置国内源
新建完成后,指定文件夹的目录大致如下:
1 | . |
_config.yml
网站的配置文件,可以在此配置大部分的参数,需要区别于主题的_config.yml配置文件。
package.json
应用程序的信息。
scaffolds
模版文件夹。当新建文章时,Hexo会根据scaffold来创建文件。
Hexo的模板是指在新建的文章文件中默认填充的内容。例如,如果修改 scaffold/post.md 中的 Front-matter (即两个---
中间的内容)内容,那么每次新建一篇文章时都会包含这个修改。source
资源文件夹是存放用户资源的地方。除 _posts 文件夹之外,开头命名为 _ (下划线)的文件/文件夹和隐藏的文件将会被忽略。在生成博客时,Markdown 和 HTML 文件会被解析并放到 public 文件夹,而其他文件会被直接拷贝过去。
themes
主题文件夹。将下载的主题文件放置到该目录,Hexo 会根据主题来生成静态页面。
三、配置博客
Hexo的配置分别站点配置和主题配置,站点配置文件为博客根目录下的_config.yml文件,主题配置文件为位于themes\<主题目录>
中的_config.yml文件。
3.1 站点配置
本节介绍博客的站点配置,部分配置的含义如下:
- title 网站标题
- subtitle 网站副标题
- description 网站描述,主要用于SEO
- keywords 网站的关键词。支持多个关键词。
- author 作者名字
- language 网站使用的语言。对于简体中文用户来说,使用不同的主题可能需要设置成不同的值,请参考你的主题的文档自行设置,常见的有 zh-Hans和 zh-CN。
- timezone 网站时区。对于中国大陆地区可以使用 Asia/Shanghai。
- theme 当前主题名称,名称为themes目录中的子目录名称。值为false时禁用主题。
- per_page 每页显示的文章量 (0 = 关闭分页功能)。
- pagination_dir 指定博客生成后,每页的index.html文件存放目录。
3.2 利用Hexo-abbrlink插件生成唯一文章链接
Hexo在生成博客文章链接时,默认是按照年/月/日/标题
格式来生成的,可以在站点配置文件中指定new_post_name的值,默认是:year/:month/:day/:title这样的格式。如果你的标题是中文的话,你的URL链接还会包含中文。而且当我们修改原文章的日期或标题后,之前生成的链接将会失效。
为了给每一篇文章指定一个唯一的不含中文的链接,可以利用hexo-abbrlink插件,来解决这个问题。
先安装下hexo-abbrlink:
1 | npm install hexo-abbrlink --save |
修改站点配置文件(_config.yml):
1 | permalink: post/:abbrlink.html |
生成完后原文章.md文件的Front-matter 内会增加abbrlink字段,值为生成的ID。这个字段确保了在我们修改了Front-matter内的title或date字段之后链接地址不会改变。换句话说,就是本篇文章有了自己的专属链接。
当然,也可以选择不同的算法和进制:
crc16 & hex
crc16 & dec
crc32 & hex
crc32 & dec
注意,配置完成之后,之前的文章的链接有可能会变成了undefined,需要执行hexo clean
并重新生成部署。
四、配置主题
每个主题的配置内容都不一样,具体参考使用主题的帮助文档。我使用的是hexo-theme-matery主题。
4.1 推荐主题
- hexo-theme-aircloud
- hexo-theme-new-yilia
- hexo-theme-vexo
- hexo-theme-next
- hexo-theme-butterfly
- hexo-theme-volantis
- hexo-theme-icarus
可以在Github中搜索Hexo Theme
发现更多主题。
五、写文章
5.1 生成文章
使用如下命令生成新的文章:
1 | hexo new <文章标题> |
执行上述命令后,会在source_posts目录下生成对应的.md文件,文件内容如下:
5.2 Front-matter
Front-matter 是文件最上方以 ---
分隔的区域,用于指定个别文件的变量。Hexo预定义了一些变量,同时每个主题也会定义一些变量。
5.2.1 Hexo预定义变量
- title 标题,默认为文章的文件名
- date 建立日期,默认为文件建立日期
- updated 更新日期,默认文件更新日期
- comments 是否开启文章的评论功能,true/false.
- tags 标签(不适用于分页),支持多个。
- categories 分类(不适用于分页),支持多个。
- permalink 覆盖文章的永久链接,永久链接应该以/或.html结尾。
- keywords: 文章关键字,用于SEO。
如:
1 |
|
5.2.2 hexo-theme-matery主题定义变量
配置选项 | 默认值 | 描述 |
---|---|---|
title | Markdown 的文件标题 |
文章标题,强烈建议填写此选项 |
date | 文件创建时的日期时间 | 发布时间,强烈建议填写此选项 |
author | 根 _config.yml 中的 author |
文章作者 |
img | featureImages 中的某个值 |
文章特征图,推荐使用图床(腾讯云、七牛云、又拍云等)来做图片的路径.如: http://xxx.com/xxx.jpg |
top | true |
推荐文章(文章是否置顶),如果 top 值为 true ,则会作为首页推荐文章 |
hide | false |
隐藏文章,如果hide 值为true ,则文章不会在首页显示 |
cover | false |
v1.0.2 版本新增,表示该文章是否需要加入到首页轮播封面中 |
coverImg | 无 | v1.0.2 版本新增,表示该文章在首页轮播封面需要显示的图片路径,如果没有,则默认使用文章的特色图片 |
password | 无 | 文章阅读密码,如果要对文章设置阅读验证密码的话,就可以设置 password 的值,该值必须是用 SHA256 加密后的密码,防止被他人识破。前提是在主题的 config.yml 中激活了 verifyPassword 选项 |
toc | true |
是否开启 TOC,可以针对某篇文章单独关闭 TOC 的功能。前提是在主题的 config.yml 中激活了 toc 选项 |
mathjax | false |
是否开启数学公式支持 ,本文章是否开启 mathjax ,且需要在主题的 _config.yml 文件中也需要开启才行 |
summary | 无 | 文章摘要,自定义的文章摘要内容,如果这个属性有值,文章卡片摘要就显示这段文字,否则程序会自动截取文章的部分内容作为摘要 |
categories | 无 | 文章分类,本主题的分类表示宏观上大的分类,只建议一篇文章一个分类 |
tags | 无 | 文章标签,一篇文章可以多个标签 |
keywords | 文章标题 | 文章关键字,SEO 时需要 |
reprintPolicy | cc_by | 文章转载规则, 可以是 cc_by, cc_by_nd, cc_by_sa, cc_by_nc, cc_by_nc_nd, cc_by_nc_sa, cc0, noreprint 或 pay 中的一个 |
注意:
以下为文章的 Front-matter
示例。
最简示例
1 |
|
最全示例
1 |
|
5.3 引用站内文章
语法如下:
1 | {% post_link slug [title] %} |
其中,slug 表示 _post 目录下的 Markdown 文件名。可以通过 title 指定链接标题。
5.4 按钮
语法如下:
1 | {% button /path/to/url/, text, icon [class], [alt] %} |
如:
1 | {% button https://jiangxueqiao.com, 江雪桥的博客, home fa-fw fa-lg, 江雪桥 %} |
5.5 插入图片
Markdown 并不会保存插入的图片资源本身,只是记录了获取资源的链接。因此我们需要选择一款合适的图床来支持博客写作,目前各大云服务商都提供了对象存储服务,如七牛云 KODO、又拍云 USS、腾讯云 COS、阿里云 OSS 等。
可以使用PicGo工具上传图片到图床上。
5.6 支持emoji表情
Hexo默认的 Markdown 渲染器是 hexo-renderer-marked,这个渲染器不支持 emoji 表情。可以利用 hexo-filter-github-emojis插件实现支持 emoji 表情。
安装插件:
1 | npm install hexo-filter-github-emojis --save |
修改站点配置文件(_config.yml)添加如下配置:
1 | githubEmojis: |
在emoji-cheat-sheet中找到想要的表情,粘贴到文章中即可。
五、发布
使用如下命令生成静态HTML文件:
1 | hexo g |
生成的HTML文件位于博客根目录的public中,将该目录部署中的所有文件部署到服务器即可。