This article was last updated on <span id="expire-date"></span> days ago, the information described in the article may be outdated.
安装 Hexo
安装 Hexo 的前提是:
关于
Node.js和Git的安装过程可以参考
使用 npm 安装 Hexo :
1 | $ npm install -g hexo-cli |
创建 GitHub 仓库
点击 GitHub 主页右上角的【新建仓库】

设置好仓库名称、描述后即可点击【生成仓库】

在仓库设置中将 GitHub Pages 的目录由 None 设置为 main ,然后点击左侧的保存,上方就会生成 GitHub Pages 网址

建站
初始化网站
按照下列代码可以初始化文件夹
1 | $ hexo init [folder] |
如果没有设置 folder ,Hexo 默认在目前的文件夹建立网站。
新建文章
1 | $ hexo new [layout] <title> |
默认情况下,Hexo 会使用文章的标题来决定文章文件的路径。对于独立页面来说,Hexo 会创建一个以标题为名字的目录,并在目录中放置一个 index.md 文件。
如果没有设置
layout的话,默认使用 _config.yml 中的default_layout参数代替。如果标题包含空格的话,请使用引号括起来。如:
1 $ hexo new "post title with whitespace"
命令说明:
参数 描述 -p,--path自定义新文章的路径 -r,--replace如果存在同名文章,将其替换 -s,--slug文章的 Slug,作为新文章的文件名和发布后的 URL 可以使用
--path参数来自行决定文章文件的目录位置
1 hexo new page --path about/me "About me"以上命令会创建一个
source/about/me.md文件,同时 Front Matter 中的 title 为"About me"。==注意!title 是必须指定的!==,当然也可以自己配置 Font-Matter ,配置方式参考 Front-matter | Hexo 中文文档 。
生成静态文件
静态文件的生成代码如下:
1 | $ hexo generate |
命令说明:
选项 描述 -d,--deploy文件生成后立即部署网站 -w,--watch监视文件变动 -b,--bail生成过程中如果发生任何未处理的异常则抛出异常 -f,--force强制重新生成文件 Hexo 引入了差分机制,如果 public目录存在,那么hexo g只会重新生成改动的文件。 使用该参数的效果接近hexo clean && hexo generate-c,--concurrency最大同时生成文件的数量,默认无限制
发表草稿
发表草稿的代码如下:
1 | $ hexo publish [layout] <filename> |
启动服务器
启动服务器的代码如下:
1 | $ hexo server |
默认的访问网址为:http://localhost:4000/
命令说明:
选项 描述 -p,--port重设端口 -s,--static只使用静态文件 -l,--log启动日记记录,使用覆盖记录格式
一键部署网站
部署方式如下:
1 | $ hexo deploy |
在开始之前,您必须先在 _config.yml 中修改参数,一个正确的部署配置中至少要有 type 参数,例如:
1 | deploy: |
您可同时使用多个 deployer,Hexo 会依照顺序执行每个 deployer。
1 | deploy: |
其他有关渲染、清楚缓存文件、列出网站资料、显示版本等命令参考:指令 | Hexo;
部署到 GitHub 的详细步骤说明:
1 | $ npm install hexo-deployer-git --save |
- 修改配置。
1 | deploy: |
部署到 GitHub 时,分支(branch)建议使用
main,因为这是仓库的默认目录。否则需要将 GitHub 仓库的默认目录更改为配置设置的对应目录。不填写时 Hexo 会自动在仓库中创建一个目录。
命令说明:
参数 描述 默认 repo库(Repository)地址 branch分支名称 gh-pages(GitHub)coding-pages(Coding.net)master(others)message自定义提交信息 Site updated: {{ now('YYYY-MM-DD HH:mm:ss') }})tokenOptional token value to authenticate with the repo. Prefix with $to read token from environment variable
- 生成站点文件并推送至远程库。执行
1 | hexo clean && hexo deploy |
- 登入 Github,在库设置(Repository Settings)中将默认分支设置为
_config.yml配置中的分支名称。稍等片刻站点就会显示在 Github Pages 中。
这一切是如何发生的?
当执行
hexo deploy时,Hexo 会将public目录中的文件和目录推送至_config.yml中指定的远端仓库和分支中,并且完全覆盖该分支下的已有内容。
文件说明:
_config.yml:网站的 配置 信息,您可以在此配置大部分的参数。
pakage.json:应用程序的信息。EJS, Stylus 和 Markdown renderer 已默认安装,您可以自由移除。
scaffolds:模版 文件夹。当您新建文章时,Hexo 会根据 scaffold 来建立文件。
source:资源文件夹是存放用户资源的地方。除_posts文件夹之外,开头命名为_(下划线)的文件 / 文件夹和隐藏的文件将会被忽略。Markdown 和 HTML 文件会被解析并放到public文件夹,而其他文件会被拷贝过去。
themes:主题 文件夹。Hexo 会根据主题来生成静态页面。
配置说明
主要的配置都可以在 _config.yml 中修改
网站
| 参数 | 描述 |
|---|---|
title |
网站标题 |
subtitle |
网站副标题 |
description |
网站描述 |
keywords |
网站的关键词。支援多个关键词。 |
author |
您的名字 |
language |
网站使用的语言。对于简体中文用户来说,使用不同的主题可能需要设置成不同的值,请参考你的主题的文档自行设置,常见的有 zh-Hans和 zh-CN。 |
timezone |
网站时区。Hexo 默认使用您电脑的时区。请参考 时区列表 进行设置,如 America/New_York, Japan, 和 UTC 。一般的,对于中国大陆地区可以使用 Asia/Shanghai。 |
其中,description 主要用于SEO,告诉搜索引擎一个关于您站点的简单描述,通常建议在其中包含您网站的关键词。author 参数用于主题显示文章的作者。
网址
| 参数 | 描述 | 默认值 |
|---|---|---|
url |
网址, must starts with http:// or https:// |
|
root |
网站根目录 | |
permalink |
文章的 永久链接 格式 | :year/:month/:day/:title/ |
permalink_defaults |
永久链接中各部分的默认值 | |
pretty_urls |
改写 permalink 的值来美化 URL |
|
pretty_urls.trailing_index |
是否在永久链接中保留尾部的 index.html,设置为 false 时去除 |
true |
pretty_urls.trailing_html |
是否在永久链接中保留尾部的 .html, 设置为 false 时去除 (对尾部的 index.html无效) |
true |
如果您的网站存放在子目录中,例如
http://example.com/blog,则请将您的url设为http://example.com/blog并把root设为/blog/。
目录
| 参数 | 描述 | 默认值 |
|---|---|---|
source_dir |
资源文件夹,这个文件夹用来存放内容。 | source |
public_dir |
公共文件夹,这个文件夹用于存放生成的站点文件。 | public |
tag_dir |
标签文件夹 | tags |
archive_dir |
归档文件夹 | archives |
category_dir |
分类文件夹 | categories |
code_dir |
Include code 文件夹,source_dir 下的子目录 |
downloads/code |
i18n_dir |
国际化(i18n)文件夹 | :lang |
skip_render |
跳过指定文件的渲染。匹配到的文件将会被不做改动地复制到 public 目录中。您可使用 glob 表达式来匹配路径。 |
如果刚开始使用 Hexo 通常不用修改这一项
文章
| 参数 | 描述 | 默认值 |
|---|---|---|
new_post_name |
新文章的文件名称 | :title.md |
default_layout |
预设布局 | post |
auto_spacing |
在中文和英文之间加入空格 | false |
titlecase |
把标题转换为 title case | false |
external_link |
在新标签中打开链接 | true |
external_link.enable |
在新标签中打开链接 | true |
external_link.field |
对整个网站(site)生效或仅对文章(post)生效 |
site |
external_link.exclude |
需要排除的域名。主域名和子域名如 www 需分别配置 |
[] |
filename_case |
把文件名称转换为 (1) 小写或 (2) 大写 | 0 |
render_drafts |
显示草稿 | false |
post_asset_folder |
启动 Asset 文件夹 | false |
relative_link |
把链接改为与根目录的相对位址 | false |
future |
显示未来的文章 | true |
highlight |
代码块的设置, see Highlight.js section for usage guide | |
prismjs |
代码块的设置, see PrismJS section for usage guide |
相对地址:
默认情况下,Hexo 生成的超链接都是绝对地址。例如,如果您的网站域名为
example.com,您有一篇文章名为hello,那么绝对链接可能像这样:http://example.com/hello.html,它是绝对于域名的。相对链接像这样:/hello.html,也就是说,无论用什么域名访问该站点,都没有关系,这在进行反向代理时可能用到。通常情况下,建议使用绝对地址。
分类/标签
| 参数 | 描述 | 默认值 |
|---|---|---|
default_category |
默认分类 | uncategorized |
category_map |
分类别名 | |
tag_map |
标签别名 |
日期/时间格式
Hexo 使用 Moment.js 来解析和显示时间。
| 参数 | 描述 | 默认值 |
|---|---|---|
date_format |
日期格式 | YYYY-MM-DD |
time_format |
时间格式 | HH:mm:ss |
updated_option |
当 Front Matter 中没有指定 updated 时 updated 的取值 |
mtime |
update_option
updated_option控制了当 Front Matter 中没有指定updated时,updated如何取值:
mtime: 使用文件的最后修改时间。这是从 Hexo 3.0.0 开始的默认行为。date: 使用date作为updated的值。可被用于 Git 工作流之中,因为使用 Git 管理站点时,文件的最后修改日期常常会发生改变empty: 直接删除updated。使用这一选项可能会导致大部分主题和插件无法正常工作。
use_date_for_updated选项已经被废弃,将会在下个重大版本发布时去除。请改为使用updated_option: 'date'。
分页
| 参数 | 描述 | 默认值 |
|---|---|---|
per_page |
每页显示的文章量 (0 = 关闭分页功能) | 10 |
pagination_dir |
分页目录 | page |
扩展
| 参数 | 描述 |
|---|---|
theme |
当前主题名称。值为false时禁用主题 |
theme_config |
主题的配置文件。在这里放置的配置会覆盖主题目录下的 _config.yml 中的配置 |
deploy |
部署部分的设置 |
meta_generator |
Meta generator 标签。 值为 false 时 Hexo 不会在头部插入该标签 |
更多扩展配置与配置相关信息参考 配置 | Hexo ;
迁移
关于 RSS 的迁移方法,首先安装 hexo-migrator-rss 插件,安装代码为:
1 | $ npm install hexo-migrator-rss --save |
安装完成后从 RSS 迁移文章,迁移代码如下:
1 | $ hexo migrate rss <source> |
source可以是文件路径或网址。
主题
创建 Hexo 主题非常容易,只要在 themes 文件夹内,新增一个任意名称的文件夹,并修改 _config.yml 内的 theme 设定,即可切换主题。一个主题可能会有以下的结构:
1 | . |
文件说明:
_config.yml:主题的配置文件。和 Hexo 配置文件不同,主题配置文件修改时会自动更新,无需重启 Hexo Server。
languages:语言文件夹。请参见 国际化 (i18n)。
layout:布局文件夹。用于存放主题的模板文件,决定了网站内容的呈现方式,Hexo 内建 Swig 模板引擎,您可以另外安装插件来获得 EJS、Haml、Jade 或 Pug 支持,Hexo 根据模板文件的扩展名来决定所使用的模板引擎,例如:
1
2 layout.ejs - 使用 EJS
layout.swig - 使用 Swig可参考 模板 以获得更多信息。
scripts:脚本文件夹。在启动时,Hexo 会载入此文件夹内的 JavaScript 文件,请参见 插件 以获得更多信息。
source:资源文件夹,除了模板以外的 Asset,例如 CSS、JavaScript 文件等,都应该放在这个文件夹中。文件或文件夹开头名称为
_(下划线线)或隐藏的文件会被忽略。如果文件可以被渲染的话,会经过解析然后储存到
public文件夹,否则会直接拷贝到public文件夹。
推荐几个好看的主题:
问题解决
为什么部署到 GitHub pages 后无法访问?
检查是否在 GitHub Pages 中将目录分支改为自己部署的分支;
检查是否将部署目录设置为默认目录——如果创建的目录不是默认目录
main,需要重新将默认目录设置为 Hexo 部署的目录
为什么部署后没有样式?
在
_config.yml文件中将url和root修改为对应的位置,如下代码所示1
2url: https://znizn.github.io/onion.github.io/
root: .然后重新生成和部署(
hexo g -d),稍等片刻即刻显示样式。说明:其中,
.表示搜索和_config.yml同一级的文件,当然也可以手动写为对应目录名为什么重新部署后 GitHub Pages 的内容没有变化?
国内网络原因,稍等一会就好。
参考资料
- 文档 | Hexo;
- 手把手教你从0开始搭建自己的个人博客 |无坑版视频教程| hexo_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili;
- Hexo 静态博客搭建笔记 | 云游君的小站 (yunyoujun.cn);
- 教你如何从零开始搭建一个属于自己的网站 | 云游君的小站 (yunyoujun.cn);
- Github Page + Hexo 免费搭建个人博客教程 | ChrAlpha’s Blog (ichr.me);
- 使用指南 | Hexo-Theme-Yun (yunyoujun.cn);
- 开始使用 | Theme Cards (ichr.me);
- hexo部署到gitee没有样式——完美解决 | guitar&programmer的博客-CSDN博客;