Hexo和Github Pages
为什么选择Github Pages?
作为一个大学生,其实已经经过了很多尝试,我从初二开始接触Linux,接触服务器,反复搭过很多次自己的网站,但因为学业繁重,最后基本都不了了之…甚至最开始只会用服务器搭建,很多时候没有备份,忘记续费于是资料就全没了。而Github Pages的话,最大的优点就是完全免费!所以你有兴趣的话就继续看下去吧!
科普
- Github Pages:
GitHub Pages 是一项静态站点托管服务,它直接从 GitHub 上获取 HTML、CSS 和 JavaScript 文件,通过构建过程运行文件,然后发布网站。 你可以在 GitHub 的 github.io 域或自己的自定义域上托管站点。
可以总结为以下几点:
- Github Pages 是 Github 提供的网页寄存服务,用于存放静态网页,也就是我们的博客。
- 我们可以使用专业软件将文档转换成静态网页(如:Hexo),然后上传至 Github
- 最后的结果就像现在这样,你们可以通过我的github.io子域名访问到我生成的静态网页,即本篇博客
- Hexo:
- Hexo 是一款基于 Node.js 的快速、简洁且高效的静态博客框架。
- Hexo 使用 Markdown(或其他渲染引擎)解析文章,安装十分方便,配置简单,自定义功能强大,在几秒内,即可利用靓丽的主题生成静态网页。
- 使用起来的效果就是:我仍然可以使用 Markdown 写博客内容,然后使用部署在本地的Hexo框架进行解析,生成相应的静态网页,最后一键上传即可。
教程开始:
Step1: 创建 github 账号和username.github.io 仓库
Step2: 在本地部署环境(Linux)
- 安装:
sudo pacman -S git npm nodejs
- 部署Hexo:
npm install -g hexo-cli
- 初始化 Hexo 框架:
hexo init Blog
- 进入 Blog 文件夹:
cd Blog
- 安装依赖:
npm install
- 启动 Hexo 服务:
hexo s
Step3: 配置 Next 主题
- Github拉取Next主题:
git clone https://github.com/iissnan/hexo-theme-next themes/next
- 在根目录的
_config.yml文件中修改theme: next
Step4: 添加博客内容
- 将写好的 Markdown 放到
source\_posts目录 - 将相应的图片放到
source\images目录 - 启动 Hexo 服务
Step5: Next主题美化
选择Scheme
编辑主题配置文件 themes\next_config.yml ,确定喜爱的Scheme,我选择了Gemini
# Schemes
scheme: Gemini
#scheme: Mist
#scheme: Pisces
#scheme: Gemini
侧边栏显示当前浏览进度
打开 themes/next/_config.yml ,搜索关键字 scrollpercent ,把 false 改为 true
如果想把 top 按钮放在侧边栏,搜索关键字sidebar ,把 false 改为 true
侧边栏加入网易云音乐播放器插件
首先在网页搜索网易云音乐,选择音乐或者歌单,并生成外链:

然后得到外链html代码:

将代码粘贴到一个合适的位置,建议放在侧边栏,在Blog/themes/next/layout/_macro/sidebar.swig文件下,选择位置复制进去,不同位置效果不同:

隐藏网页底部powered By Hexo / 强力驱动
打开 themes/next/layout/_partials/footer.swig ,使用注释隐藏之间的代码即可,或者直接删除。位置如下:
<!--
<div class="powered-by">
{{- __('footer.powered', next_url('https://hexo.io', 'Hexo', {class: 'theme-link'}) + ' & ' + next_url(next_site, 'NexT.' + theme.scheme, {class: 'theme-link'})) }}
</div>
-->
设定菜单内容
编辑主题配置文件 themes\next_config.yml
menu:
#home: / || fa fa-home
about: /about/ || fa fa-user
tags: /tags/ || fa fa-tags
categories: /categories/ || fa fa-th
#archives: /archives/ || fa fa-archive
#schedule: /schedule/ || fa fa-calendar
#sitemap: /sitemap.xml || fa fa-sitemap
#commonweal: /404/ || fa fa-heartbeat
按照上面的方式设置的菜单之后,点击标签,或者关于我都会出现错误页面,那这是怎么回事呢? 在默认情况,source 目录只有 _posts 一个文件夹的,并没有生成对应的 tags,about 等文件夹
生成下菜单文件夹的可以了: hexo new page tags
搜索功能
npm install hexo-generator-search --安装插件,用于生成博客索引数据
修改博客配置文件(根目录/_config.yml),添加以下代码
search:
path: search.json
field: post
format: html
limit: 1000
文章自动折叠功能
npm install hexo-excerpt --save
修改博客配置文件(根目录/_config.yml),添加以下代码
excerpt:
depth: 10
excerpt_excludes: []
more_excludes: []
hideWholePostExcerpts: true
利用Hexo-abbrlink插件生成唯一文章链接
Hexo在生成博客文章链接时,默认是按照年、月、日、标题格式来生成的,可以在站点配置文件中指定new_post_name的值。默认是:year/:month/:day/:title这样的格式。如果你的标题是中文的话,你的URL链接就会包含中文。复制后的url路径就是把中文变成了一大堆字符串编码,如果你在其它地方用了你自己这篇文章的url链接,偶然你又修改了该文章的标题,那这个url链接岂不是失效了。 为了给每一篇文章来上一个属于自己的链接,可以利用hexo-abbrlink插件,来解决这个问题。
首先安装下hexo-abbrlink
npm install hexo-abbrlink --save
修改博客配置文件(根目录/_config.yml),添加以下代码
permalink: post/:abbrlink.html
abbrlink:
alg: crc32 # 算法:crc16(default) and crc32
rep: hex # 进制:dec(default) and hex
日志的自动分类插件
npm install hexo-auto-category --save
修改博客配置文件(根目录/_config.yml),添加以下代码
auto_category:
enable: true
depth:
给Hexo博客添加RSS订阅
npm install hexo-generator-feed --save
然后在 hexo 根目录下的 _config.yml 文件中添加配置
# RSS订阅
feed:
enable: true
type: atom
path: atom.xml
limit: 0
hub:
content:
content_limit: 140
content_limit_delim: ' '
order_by: -date
icon: icon.png
autodiscovery: true
template:
在主题目录的 _config.yml 的menu目录添加
RSS: /atom.xml || fa fa-rss
Hexo插入图片并解决图片的路径问题
ref: Hexo插入图片并解决图片的路径问题
npm install hexo-renderer-marked --save
修改博客配置文件(根目录/_config.yml),修改添加以下代码
post_asset_folder: true
relative_link: false
marked:
prependRoot: true
postAsset: true
- post_asset_folder: true
执行hexo new post xxx时,会同时生成./source/_posts/xxx.md文件和./source/_posts/xxx目录,可以将该文章相关联的资源放置在该资源目录中。
- relative_link: false
不要将链接改为与根目录的相对地址。此为默认配置。
- prependRoot: true
将文章根路径添加到文章内的链接之前。此为默认配置。
- postAsset: true
在post_asset_folder设置为true的情况下,在根据prependRoot的设置在所有链接开头添加文章根路径之前,先将文章内资源的路径解析为相对于资源目录的路径。
举例说明: 执行hexo new post demo后,在demo文章的资源路径下存放了a.jpg和cover.jpg(用作封面),目录组织结构如下:
./source/_posts
├── demo.md
└── demo
├── a.jpg
└── cover.jpg
在demo.md的适当位置引用这两张图片,指定图片相对路径时需要假设当前目录为./source/_posts/demo/,而不是demo.md文件本身的所在目录。
图片语法:

Github仓库: hexo-renderer-marked
Hexo插入音视频等等
有图片,那怎么少得了音视频呢
安装插件:
npm install hexo-tag-mmedia@1 --save
别问为什么不用dplayer和apldayer,原因就是用不了,不兼容新版本
修改博客配置文件(根目录/_config.yml),修改添加以下代码
mmedia:
audio:
default:
video:
default:
aplayer:
js: https://cdn.jsdelivr.net/npm/aplayer@1/dist/APlayer.min.js
css: https://cdn.jsdelivr.net/npm/aplayer@1/dist/APlayer.min.css
default:
contents:
meting:
js: https://cdn.jsdelivr.net/npm/meting@2/dist/Meting.min.js
api:
default:
dplayer:
js: https://cdn.jsdelivr.net/npm/dplayer@1/dist/DPlayer.min.js
hls_js: https://cdn.jsdelivr.net/npm/hls.js/dist/hls.min.js
dash_js: https://cdn.jsdelivr.net/npm/dashjs/dist/dash.all.min.js
shaka_dash_js: https://cdn.jsdelivr.net/npm/shaka-player/dist/shaka-player.compiled.js
flv_js: https://cdn.jsdelivr.net/npm/flv.js/dist/flv.min.js
webtorrent_js: https://cdn.jsdelivr.net/npm/webtorrent/webtorrent.min.js
default:
contents:
bilibili:
default:
page: 1
danmaku: true
allowfullscreen: allowfullscreen
sandbox: allow-top-navigation allow-same-origin allow-forms allow-scripts allow-popups
width: 100%
max_width: 850px
margin: auto
xigua:
default:
autoplay: false
startTime: 0
allowfullscreen: allowfullscreen
sandbox: allow-top-navigation allow-same-origin allow-forms allow-scripts allow-popups
width: 100%
max_width: 850px
margin: auto
使用方法:
Aplayer:
Dplayer:
ref:hexo-tag-mmedia
一键回顶部
修改Next配置文件(themes/next/_config.yml),修改以下代码
back2top:
enable: true
# Back to top in sidebar.
sidebar: false
# Scroll percent label in b2t button.
scrollpercent: true
阅读进度条
修改Next配置文件(themes/next/_config.yml),修改以下代码
reading_progress:
enable: true
# Available values: top | bottom
position: top
color: "#37c6c0"
height: 3px
作者头像设置
将我们的头像图片放置在 themes/next/source/images 目录下,然后修改 themes/next/_config.yml
# Sidebar Avatar
avatar:
# Replace the default image and set the url here.
url: /images/author.jpeg
# If true, the avatar will be dispalyed in circle.
rounded: false #头像是否设为圆形,否则为矩形
# If true, the avatar will be rotated with the cursor.
rotated: true #鼠标放在头像上时是否旋转
添加博客自定义图标
博客网站的图标可以在easyicon、bitbug、iconfont等网站选择和制作,然后选择或者创建相应大小的图标文件,放置在 themes/next/sources/images 目录下,然后修改 themes/next/_config.yml
favicon:
small: /images/favicon-16.png
medium: /images/favicon-32.png
apple_touch_icon: /images/favicon-128.png
safari_pinned_tab: /images/favicon-512.png
#android_manifest: /images/manifest.json
#ms_browserconfig: /images/browserconfig.xml
增加文章置顶功能
npm uninstall hexo-generator-index --save
npm install hexo-generator-index-pin-top --save
然后在需要置顶的文章的Front-matter中加上top: true即可。比如下面这篇文章:
---
title: 我与Linux的情缘
tags: Linux
categories:
- Linux
abbrlink: d773eb13
date: 2025-05-11 22:24:04
top: true
---
到目前为止,置顶功能已经可以实现了。
不过置顶的文章显示在最上面之后,如果没有明确的置顶标志,是不是感觉有点怪怪的
设置置顶标志
打开: themes/next/layout/_macro 目录下的post.swig文件,定位到 <div class="post-meta">标签下,插入如下代码:
<font color=7D26CD>置顶</font>
<span class="post-meta-divider">|</span>
ref: Hexo博客优化之彻底解决博文置顶问题
ref: Hexo博客置顶功能优化
定制Next主题的Sidebar_state
因为只有true和false 而我想定制在Hexo的NexT主题中仅显示侧边栏的archive部分并隐藏tags
修改Next配置文件 theme/next/layout/_partials/sidebar/site-overview.swig ,注释你想注释掉的,比如我注释掉了 categories 和 tags

Step6: 将生成的静态页面部署到 Github 上
- 具体操作:修改站点配置文件_config.yml的最后部分
deploy:
type: git
repo: https://github.com/k7tmiz/k7tmiz.github.io.git
branch: master
要先安装deploy-git,才能用命令部署到GitHub
npm install hexo-deployer-git --save
然后
hexo clean #清除之前生成的东西
hexo generate #生成静态文章,缩写hexo g
hexo deploy #部署文章,缩写hexo d
过一会儿就可以在 yourname.github.io 这个网站看到你的博客了
暂时也想不太起来还改了哪些内容,等想起来或者有扩充我再接着完善文档好吧
还有使用Git分支保存Hexo博客源码到Github有空再更… 2025.5.19日凌晨0:45分先立下Flag(doge)
其他参考的一些帖子
ref: 2024年,如何使用 github pages + Hexo + Next 搭建个人博客 ref: NexT主题美化 ref: Hexo博客优化之Next主题美化