Hexo 搭建指南
为什么选择 Hexo
在选择 Hexo 之前尝试过其它方法:
-
CSDN、博客园、Blogger:免服务器、无需技术基础,但是可定制性低。CSDN 存在文章版权问题;博客园可能随时倒闭;Blogger是谷歌的,还是有关闭的可能性。
-
WordPress、Typecho:需要自己买服务器,备案网站等。
-
Webflow、Wix:国内讨论度低,并且它们的目标群体更偏向电子商务。
权衡之下最终选择了 Github Pages + Hexo 的方法,利弊如下:
-
✅Hexo 在配置完成后就可以快速部署
-
✅Hexo 支持 Markdown 语法
-
✅Hexo 可自定义的主题和插件较多
-
✅Hexo 在本地部署完成后上传到 Github Pages。即使没有了 Github,也不影响 Hexo 的本地数据
-
✅使用 Github Pages 免费,且无需自己买服务器、备案网站等。
-
❌中国大陆网络打开 Github Pages 页面较慢,需自备梯子。
-
❌使用 Github Pages ,仓库必须是 Public(公开) 的,所以任何人都可以 Fork(Private(私人)仓库创建 Github Pages 需要 GitHub Pro)
-
❌Github 虽然是存储开源代码的网站,但网站本身是微软的产品,仍受到微软相关协议的影响(比如在接到相关投诉后有权利删库)
权衡好利弊之后,就可以开始下一步。
搭建 Hexo
环境配置
需要安装以下软件:
-
Node.js (必需。Node.js 版本不能低于 10.13,建议使用 Node.js 12.0 及以上版本)
-
Git(必需。但如果不想上传到 Github Pages,仅在本地部署就不需要了)
-
PowerShell + Terminal(非必需,但个人推荐 Win10 和 Win11 用户安装)
第一步,安装 Node.js ,一直下一步即可(其中已经内置了 npm)。
安装完成后,可以在 PowerShell 里使用以下命令查看 Node.js 版本:
1 | node -v |
可使用以下指令查看 npm 版本:
1 | npm version |
第二步,安装 Git 并选择默认编辑器(我自己用 VSCode,当然不选也没问题)

安装完成后,可以在 PowerShell 里使用以下指令测试一下:
1 | git --version |
有些时候使用 npm 命令可能下载不了插件,必要时需要更换 npm 源:
1 | npm config set registry https://mirrors.huaweicloud.com/repository/npm/ |
npm 官方原始镜像网址是:https://registry.npmjs.org/
淘宝 NPM 镜像:http://registry.npmmirror.com
阿里云 NPM 镜像:https://npm.aliyun.com
腾讯云 NPM 镜像:https://mirrors.cloud.tencent.com/npm/
华为云 NPM 镜像:https://mirrors.huaweicloud.com/repository/npm/
网易 NPM 镜像:https://mirrors.163.com/npm/
中国科学技术大学开源镜像站:http://mirrors.ustc.edu.cn/
清华大学开源镜像站:https://mirrors.tuna.tsinghua.edu.cn/
腾讯,华为,阿里的镜像站基本上比较全
安装 Hexo
当以上环境配置完成后,就可以安装 Hexo 了。
打开 PowerShell,使用 npm 命令安装 Hexo:
1 | npm install -g hexo-cli |
如果遇到 npm 提示升级,无视即可。

创建博客
初始化目录
找一个合适的新建文件夹(不能包含中文),比如 E:\Blogs\,作为博客的根目录。
如果此前已经安装了PoweShell 和 Terminal,只需要在这个文件夹里右键,选择「在终端(PowerShell)中打开」 。
在终端里面输入以下指令开始初始化:
1 | hexo init |
程序会从这个网址下载所需文件,如果报错,请使用以下命令再安装一次
1 | npm install |

简单解释这些文件夹和文件的作用:
-
.github
- Github 相关配置,不用管。
-
node_modules
- 该文件夹用于存放 Hexo 及其插件的依赖项。
- 依赖项由
npm install安装,通常不需要手动修改。
-
public(生成后出现)
- 存放
hexo generate命令生成的静态网页文件。 - 这些 HTML、CSS、JS 文件会被部署到服务器(如 GitHub Pages)。
- 你可以通过
hexo server命令在本地访问这些页面。
- 存放
-
scaffolds
- 存放文章模板(脚手架),定义
hexo new创建新文章时的默认结构。 - 可以修改
post.md以更改新文章的默认格式。
- 存放文章模板(脚手架),定义
-
source
- 该目录用于存放博客的内容,包括文章、页面、资源等。
- 子目录
_posts存放博客文章,文章以 Markdown (.md) 格式编写。 - 子目录
_draft存放博客草稿,此文件夹内的文章不会被发布。
-
themes
- 存放博客主题。默认情况下,有 landscape 主题。
- 你可以下载和更换主题,将新主题放入该文件夹,并修改
_config.yml进行配置。
-
.gitignore
- Git 忽略文件,防止提交不必要的文件,如
node_modules和public。
- Git 忽略文件,防止提交不必要的文件,如
-
_config.landscape.yml
- 这个是主题专属的配置文件,适用于 Hexo 默认的 landscape 主题。
- Hexo 允许主题使用单独的
_config.yml文件来管理主题相关的设置,而不会影响全局配置。
-
_config.yml
- Hexo 的全局配置文件,包含博客的基本设置,如站点名称、URL、主题、部署方式等。
- 是 Hexo 最重要的配置文件之一,需要手动编辑以满足个性化需求。
-
db.json
- 记录 Hexo 生成的缓存信息,加快生成速度。
- 可安全删除,Hexo 运行时会自动重新生成。
-
package.json(Hexo 项目配置文件)
- 定义了 Hexo 博客的项目信息,包括所需的 npm 依赖(如 Hexo 核心和插件)。
- 项目名称、版本、描述等信息。
- dependencies(依赖项):列出了 Hexo 及其插件,例如
hexo,hexo-generator-index等。 - scripts(脚本):定义了一些快捷命令,如
hexo server。 - 如果要安装新的插件(如 SEO 插件),可以运行
npm install 插件名 --save,然后它们会被添加到package.json中。
-
package-lock.json(依赖锁定文件)
- 这个文件会随着
package.json一起出现,用于锁定 npm 依赖的版本,确保在不同环境下安装时保持一致。 - 你通常不需要手动修改它,它会在运行
npm install时自动更新。
- 这个文件会随着
启动 Hexo 服务
1 | hexo new test_my_site //创建一篇文章(带标题) |

然后就可以在浏览器里,打开 http://localhost:4000/ 查看在本地部署好的 Hexo。
发布到 Github Pages
新建仓库
登录 Github 账号后,点击网页右上角的 ➕号(Create new…),选择 New repository。
Repository name 一栏中,按照 Github用户名.github.io 的格式填写。
仓库选择 Public(公开),然后点击右下角绿色按钮 Create repository。

配置 SSH Keys
注意:长期不使用可能导致 SSH Keys 失效,需要重新配置 SSH Keys
任意文件夹右键菜单选择 Git Bash Here
输入以下命令:ssh-keygen -t rsa -C "你的GitHub注册邮箱"
敲几次回车后,它会告诉你:
Your public key has been saved in /C/Users/<用户名>/.ssh/id_rsa.pub

在 C:\Users\<用户名>\.ssh 目录下找到 id_rsa.pub,并用记事本打开。
点自己的 Github 头像 → Settings → SSH and GPG keys → New SSH Key

将 id_rsa.pub 的内容全部复制并粘贴到 KEY 文本框里,再点击 Add SSH Key,一个新的 SSH Key 生成。
完成后在 Git 终端输入 ssh -T git@github.com 验证是否连接成功

一键部署
注意:这里采用 Hexo 官方文档的一键部署教程,不会将源文件夹里的文件上传到 GitHub。
用 VSCode 打开在 Hexo 根目录的 _config.yml 文件,配置 deploy
1 | deploy: |
关于 repository url,在仓库的右上角点击 Code,找到 SSH 链接。

branch 参数也可以填写其他分支,在库的 Settings —— Pages 中设置

接下来,在 Hexo 根目录下启动 Git Bash,输入命令安装 hexo-deployer-git
1 | npm install hexo-deployer-git --save |
接着使用 hexo clean 清理缓存,使用 hexo d 部署到 Github 上

第一次部署,终端提示需要账号和邮箱,运行以下命令:
1 | git config --global user.email "you@example.com" |
之后再运行 hexo clean 和 hexo d ,弹出窗口提示,选择 Sign in with your browser,在浏览器里将 Git 与 Github 关联。
链接成功后,在浏览器的地址栏里输入:用户名.github.io,就可以访问了(可能有几分钟的延迟才能生效)。
撰写博客
通常来说,可以使用 hexo new + 文章标题来新建一个 markdown 文件。但我个人认为不如直接手动新建更方便。
定位到文件夹 Hexo根目录\source\_posts,里面放着的就是所有的文章,只需要新建一个文本文档,扩展名为 .md 就可以作为一篇新文章。
注意:使用 hexo new 生成的 markdown 文件和文章的 title 属性可以不一样,所以建议生成的 markdown 文件名里面不要带空格。
如果想写一篇文章,但是暂时不想发布,就放在 Hexo根目录\source\_drafts 文件夹内。
在文章撰写开始前,可以在每篇文章的开头附上 Front-matter ,其中包含了文章的基本信息(此信息也可以被 Obsidian 识别):
1 |
|
此外,Front-matter 也可以根据主题增删参数,比如 butterfly 主题。
编辑工具
通常来说我会使用以下软件:
-
Obsidian(编辑文章)
-
VSCode + markdownlint插件(markdown 语法检查)
只要将 _posts 文件夹作为 Obsidian 的仓库之一,就可以在 Obsidian 里面编辑 Markdown 文件。这样做的利弊是:
-
✅Obsidian 可以通过快捷键、自动补全等功能,让写markdown语法更加便捷
-
✅Obsidian 所见即所得,更快地看到排版效果
-
❌Obsidian 具有一些专属的 markdown 语法,和 Hexo 不兼容,需要自行修改
为了适应 Hexo,Obsidian 需做出如下配置:
-
⚙文件与链接 —— 关闭【使用 wiki 链接】
-
⚙文件与链接 —— 内部链接类型——基于当前笔记的相对路径
另外使用 VSCode 检查 markdown 语法属于是比较强迫症的事,个人不是很推荐。
文章整理
如果文章写得多,通过 Hexo 主题里带有的归档功能,能够把文章按照日期归档。
但是具体到电脑里的文件,在 _post 文件夹内会堆积大量文件。
目前我个人采取的方法:
修改创建新文章时的名称
1 | # _config.yml |
这样,使用 hexo new 创建新文章时,会自动放到对应年的文件夹内。
分类和标签
| Categories(分类) | Tags(标签) | |
|---|---|---|
| 层级关系 | ✅ 有(支持父子分类) | ❌ 没有(都是平级的) |
| 适用范围 | 📂 适用于大的分类(如技术、生活) | 🏷 适用于具体的关键词(如 JavaScript、Vue) |
| 单个文章数量 | ⛔ 建议 1-2 个分类 | ✅ 可以有多个标签 |
| 展示方式 | 📌 /categories/ 页面展示分类列表 |
🔖 /tags/ 页面展示标签云 |
| SEO 作用 | 🔥 有利于结构化内容 | ⭐ 有助于文章索引和搜索 |
文章加密
使用 hexo-blog-encrypt 插件。
输入以下命令安装:
1 | npm install hexo-blog-encrypt --save |
修改文章的信息头:
1 |
|
图片处理
图片存放
比较普遍的是两个方案:
-
图片上传到图床(云端方案)
- ✅文件放在服务器,节省本地空间
- ✅通常没有存储限制
- ❌隐私泄露风险
- ❌非国内服务器,导致图片加载缓慢
- ❌图床网站跑路,导致文件丢失
-
图片留在电脑里(本地方案)
- ✅文件更安全,不易丢失
- ✅更方便地管理文件
- ❌图片占用存储空间
- ❌硬盘故障导致数据丢失
- ❌发布文章仍需要上传图片,占用自己的网络存储空间
网络图床:
Github 搭建图床:https://blog.csdn.net/qq_44231797/article/details/131658184
选择本地存储,可以尝试图片转码压缩:
-
caesium。适合Windows 的开源软件
-
imagemagick。命令行工具,可调参数较多。
插入图片
资源(Asset)代表 source 文件夹中除了文章以外的所有文件,例如图片、CSS、JS 文件等。
全局资源文件夹
如果你的Hexo项目中只有少量图片,那最简单的方法就是将它们放在 source/images 文件夹中。 然后通过类似于  的方法访问它们。
优劣如下:
-
✅操作便捷
-
❌难以对资源文件进行统一管理
文章资源文件夹
对于那些想要更有规律地提供图片和其他资源以及想要将他们的资源分布在各个文章上的人来说,Hexo也提供了更组织化的方式来管理资源。 这个稍微有些复杂但是管理资源非常方便的功能可以通过将 config.yml 文件中的 post_asset_folder 选项设为 true 来打开。
1 | # 修改 _config.yml 配置 |
当资源文件管理功能打开后,Hexo将会在你每一次通过 hexo new [layout] <title> 命令创建新文章时自动创建一个文件夹。 这个资源文件夹将会有与这个文章文件一样的名字。 将所有与你的文章有关的资源放在这个关联文件夹中之后,你可以通过相对路径来引用它们,这样你就得到了一个更简单而且方便得多的工作流。
优劣如下:
-
✅管理资源非常方便,便于后期对文章进行修改
-
❌会有大量的文件夹
相对路径引用的标签插件
通过常规的 markdown 语法和相对路径来引用图片和其它资源可能会导致它们在存档页或者主页上显示不正确。 在Hexo 2时代,社区创建了很多插件来解决这个问题。 但是,随着Hexo 3 的发布,许多新的标签插件被加入到了核心代码中。 这使得你可以更简单地在文章中引用你的资源。
1 | {% asset_path slug %} |
比如说:当你打开文章资源文件夹功能后,你把一个 example.jpg 图片放在了你的资源文件夹中,如果通过使用相对路径的常规 markdown 语法  ,它将 不会 出现在首页上。
正确的引用图片方式是使用下列的标签插件而不是 markdown :
1 | {% asset_img example.jpg This is an example image %} |
通过这种方式,图片将会同时出现在文章和主页以及归档页中。
优劣如下:
-
✅最稳定,不会因为其它插件冲突导致图片不显示
-
❌操作复杂
-
❌与其它 markdown 软件不兼容
使用 Markdown 嵌入图片
hexo-renderer-marked 3.1.0 引入了一个新的选项,其允许你无需使用 asset_img 标签插件就可以在 markdown 中嵌入图片
如需启用:
1 | # _config.yml 配置 |
启用后,资源图片将会被自动解析为其对应文章的路径。 例如: image.jpg 位置为 /2020/01/02/foo/image.jpg ,这表示它是 /2020/01/02/foo/ 文章的一张资源图片,  将会被解析为 <img src="/2020/01/02/foo/image.jpg"> 。
优劣如下:
-
✅与 Obsidian 兼容
-
❌依赖
hexo-renderer-marked插件。如果需要hexo-renderer-markdown-it,则必须删除该插件 -
♻️替代方案:使用
hexo-asset-img插件
博客配置
配置文件详解
注意:如果存在主题配置文件(如
_config.butterfly.yml),则其优先级高于_config.yml。
这里解释 _config.yml 文件参数代表的含义,具体参考**官方文档**。
1 | # Hexo Configuration |
Hexo 命令列表
Hexo 命令参考官方文档。
其它 npm 命令:
1 | npm list --depth 0 #列出 Hexo 已安装的所有插件 |
更改主题
注意:本文以 butterfly 主题为例,具体可参考官方的系列文章。
下载主题
1 | git clone -b master https://github.com/jerryc127/hexo-theme-butterfly.git themes/butterfly |
应用主题
在 _config.yml 中,修改以下参数:
1 | # Extensions |
安装插件
如果你没有 pug 以及 stylus 的渲染器,请下载安装:
1 | npm install hexo-renderer-pug hexo-renderer-stylus --save |
配置文件
将 \themes\butterfly\ 目录下的 _config.yml 复制一份到 Hexo 的根目录,并重命名为 _config.butterfly.yml。
在此配置文件里做出的修改,其优先级会高于根目录内的 _config.yml
升级主题
先将原文件夹重命名为别的名称,例如 butterfly-bkp,用于升级失败进行回退;
再重新执行安装命令:
1 | git clone -b master https://github.com/jerryc127/hexo-theme-butterfly.git themes/butterfly |
比对升级后的配置文件_config.yml,如果某些配置发生了变化(改名或弃用),release 的说明里会特别提示或给出配置文件版本对比diff,同步修改原配置文件即可。
优化文章链接
注意:该插件会修改 permalink 参数,一些插件可能需要该参数,需注意兼容性问题。
安装 hexo-abbrlink 插件:
1 | npm install hexo-abbrlink --save |
修改 _config.yml 中的 permalink 参数:
1 | permalink: posts/:abbrlink/ |
在 _config.yml 中添加 hexo-abbrlink 插件的配置信息:
1 | # abbrlink config |
更换 Markdown 渲染器
注意:此插件似乎和
hexo-abbrlink存在冲突,images相关参数不起作用。
参考资料:https://blog.csdn.net/qq_42951560/article/details/123596899
卸载 Hexo 自带的渲染器:
1 | npm un hexo-renderer-marked --save |
安装新的渲染器 hexo-renderer-markdown-it:
1 | npm i hexo-renderer-markdown-it --save |
将如下文本复制粘贴到 Hexo 的配置文件 _config.yml 的尾部:
1 | # hexo-renderer-markdown-it |
将 prepend_root 和 post_asset 的参数设为 true 之后,就可以使用标准 Markdown 语法插入图片。
其他优化
常见问题
无法插入图片
注意:使用相对路径后,最好不要再改动 markdown 文件对应的资源文件夹名称。
如果达成了以下要素:
-
安装了
hexo-abbrlink插件并修改了 permalink 参数 -
删除了
hexo-renderer-marked插件 -
安装了
hexo-renderer-markdown-it插件并添加了配置 -
_config.yml中,参数post_asset_folder: true -
使用
标准 markdown 语法来插入图片
此时使用 hexo g 生成后,图片路径为 http://localhost:4000/<文章标题>/image.jpg,这样找不到图片。推测是因为 hexo-abbrlink 插件和 hexo-renderer-markdown-it 插件不兼容。
做出如下修改:
-
安装
hexo-asset-img插件 -
删除文章当前的
abbrlink,由插件重新生成。
使用 hexo clean 清理缓存后,hexo g 重新生成,再打开博客,图片正常显示。
npm 下载插件过程报错
错误信息:
1 | npm ERR! code ETIMEDOUT |
更换 npm registry 地址:
1 | npm config set registry https://registry.npmmirror.com |
配置 Github 过程报错
错误信息:
1 | Error: Spawn failed |
将库的https链接改为 SSH 链接
或者删除 .deploy_git 文件夹重新生成
更改主题后无法正常进入主页
报错信息:
1 | extends includes/layout.pug block content include ./includes/mixins/post-ui.pug #recent-posts.recent-posts +postUI include includes/pagination.pug |
更换butterfly主题后,打开网页显示错误
漏下了主题安装教程中“安装插件”步骤