1. 构建工具安装准备
1.1 Node.js环境搭建
hexo基于Node.js构建,需安装Node.js依赖环境,由于ubuntu系统仓库Node.js比较旧,需前往Node.js官网按指引安装最新稳定版本。
由于博主使用的是WSL子系统,这里选择Linux系统和nvm安装方式。
首先安装nvm Node.js版本管理器,再使用nvm工具包安装指定版本Node.js,Node.js自带npm软件包管理器,顺便安装yarn JavaScript软件包管理器。
具体操作如下:
1 | # Download and install nvm: |
1.2 NPM简介
NPM(Node Package Manager) 是 Node.js 的默认包管理工具,用于管理 JavaScript 项目的依赖库和工具。它允许开发者轻松地安装、更新、共享和发布代码包,同时支持版本控制和脚本运行。
如果需要加速国内访问,可以配置淘宝镜像:
以下是一些常用的 NPM 命令:
1 | npm init # 初始化 package.json 文件 |
本地与全局安装
2. HEXO配置
2.1 hexo安装以及初始化
根据Hexo官网安装指引,全局安装npm install -g hexo@8.0.0
1 | hexo init blog #初始化blog目录,目录一定为空。 |
初始化后blog文件夹结构如下.
1 | . |
2.2 hexo配置 开始折腾
本站使用Stellar主题构建,Stellar 是一个内置文档系统的简约商务风 Hexo 主题,支持丰富的标签和动态数据组件,帮助您简单从容地应对各种表达需求,十分推荐内容创作者使用 Stellar 开始您全新的博客之旅。
安装路径位于blog/node_modules/文件夹内。
在 blog/_config.yml 文件中找到并修改:
theme: stellar
将blog/node_modules/_config.yml 拷贝一份至/blog目录重命名为_config.stellar.yml,该配置文件优先级高于主题目录。
参阅Stellar wiki选择开启需要的功能。
3. 网站统计
网页底部文章统计参考博主BoBoBlog文章
需要在主题文件footer.ejs里将 {post_count} 和 {word_count} 替换为实际数据。Stellar 主题页脚渲染时,content 是字符串,可以用 JS 替换。
建议在layoutDiv 函数里,渲染 markdown 前加如下替换:
查看代码
1 | <% |
然后在主题配置文件footer:content:增加如下代码,即可实现显示网站总文章字数统计。
1 | <span class="totalcount">已发布博客{blog_count}篇 · 笔记{note_count}篇 · 文档{wiki_count}篇 · 总计{word_count}字</span> |
网页访问统计由于不蒜子老是挂,现在使用的是Vercount插件,不蒜子的优化版本。Vercount: 一个比不蒜子更好的网站计数器 | EvanNotFound’s Blog
需要修改主题配置文件,在footer:→ content:位置添加如下。内容
1 | content: | # 支持 Markdown 格式 |
4. 评论系统
4.1 waline启用
stellar已集成waline插件,首先主题配置文件选择启用waline,具体配置见以下代码。
然后跟着主页快速上手 | Waline wiki一步步搭建到vercel。
SkyReeves博主写的很详细,参考hexo博客引入Waline评论模块 - SkyReeves使用LeanCloud国际版和Vercel搭建。
查看代码
1 | comments: |
4.2 评论框颜色跟随
启用后会发现,评论区域部分元素无法显示,需要修改waline.styl文件,调整颜色对比度。
为 .wl-panel 强制设置 background: var(--waline-bgcolor) !important,这样评论框会跟随主题背景色切换。重新编译并刷新页面验证效果。
1 | .wl-panel { |
5. 面包屑文章字数统计
主题布局文件article_banner.ejs中添加如下代码,即可实现功能。
代码折叠
1 | <% |
6. 动态图标配置
在主题配置文件_config.stellar.yml中增加以下CSS文件,引入font-awesome图标库。在font-awesome v7 CDN里面找一个CDN。
1 | # 动态图标引入 |
图标格式张这样<i class="fa-solid fa-github fa-brands fa-bounce"></i>,然后就可以在想要添加图标的地方使用了,Font Awesome主页搜索相应特性的图标,大部分都是免费的。
1 | footer: |
7. 图床、图片配置
- ImgToLink+是一款免费、免登录图床软件,支持单个文件50M,返回短链。
16图床,永久免费,无需登录的图床免费的往往很容易挂掉,用作评论区上传图床临时用可以。
Cloudflare好像也有免费的image服务。
7.1 Piclist Github图床配置
由于typora支持picgo和piclist图床上传,所以选用了目前还在持续更新的piclist。
typora图片设置如下,插入图片时直接上传piclist图床,然后自动转义图片url。
PicList主页下载安装最新版,选择Github图床搭建,参考PicGo/PicList + Github 搭建图床 | Theo Docs
Gitbhub新建图床仓库,并在设置Developer Settings中新建图床token,勾选piclist仓库repo读写权限。
然后再piclist端Github图床设置中关联新建的piclist仓库和token。
piclist相关设置
piclist设置图片最大800px宽度,大于800压缩至800,小于800不处理。
使用
https://cdn.jsdelivr.net/gh加速Github图床。上传成功直接复制url链接
开启时间戳重命名
添加图片水印
使用短链接
图片格式转换成压缩率更高的AVIF格式
7.2 搭建图床短链接
为什么要用短链,部分平台(尤其是社交平台、论坛、旧版编辑器)对 URL 长度或格式有严格限制,包含特殊字符(如 ? & /)的长链接,可能被平台误判为 “恶意链接” 而拦截,且原始图床链接可能泄露敏感信息。
piclist上传的图片链接也是一堆乱码,widowns文件系统目录\被转义,可以按时间戳重命名图像名称,也可以搭建短链接网站。
参考xyTom/Url-Shorten-Worker 主页wiki和用cloudflare搭建短链接网站搭建。
7.3 waline评论图床上传
开启waline评论区图床上传,图片能上传成功,但是的识别不了链接。
已经关掉了,PicList回传的不是json,只能选择URL、markdown格式。
7.4 fancybox设置
stellar集成fancybox灯箱插件,可以在放大网页上面的图片,功能很多。
Stellar:表达类标签组件(33+个) - XAOXUU stellar wiki介绍很详细。
md语法图片格式支持默认全局打开,有个问题就是点击文章海报图片也会放大。
1 | plugins: |
8. 侧边栏配置
8.1 左侧栏页脚图标
stellar主题预留有7个位置,主题配置如下,footer下面添加以下内容。
1 | ###### Footer ###### |
8.2 侧边栏组件
参考主题wiki配置Stellar:侧边栏组件的配置与使用(9个) - XAOXUU
可以根据需要添加或者自定义喜欢的组件。使用Hexo和Stellar搭建个人博客网站【超详细贴心保姆级教程💖】 - BoBoBlog
在 _data/widgets.yml 文件中添加以下内容,需要自己创建:
1 | # 欢迎语 |
修改主题配置文件,在想要显示的页面添加welcome组件,
1 | home: |
9. 主导航栏配置
9.1 启用主导航栏菜单
主题配置文件中设置如下,使用fontawesome图标。
1 | menubar: |
效果展示
9.2 主导航栏下拉菜单设置
菜单栏位置不够放怎么办,那就增加一个下拉菜单吧。在 Hexo 主题(这里是 Stellar 主题)的菜单栏 “更多” 处增加下拉菜单,可按以下步骤操作:
步骤一:修改主题配置文件(_config.yml)找到主题配置文件中 menubar 部分关于 “更多”(id: more)的配置项。
在 items 里,为 “更多” 添加子菜单结构。
这里通过 nested 字段来定义 “更多” 的下拉子菜单,每个子项包含 title(子菜单标题)和 url(子菜单跳转链接)。
1 | menubar: |
步骤二:修改主题模板文件(菜单渲染相关)
Hexo 主题的菜单渲染通常在 layout 目录下的相关模板文件 menu.ejs中,为 “更多” 菜单项添加下拉菜单的渲染逻辑。
这段代码的作用是:当菜单项(这里是 “更多”)存在 nested 子菜单配置时,渲染下拉菜单结构;否则渲染普通链接。
查看代码
1 | <% |
步骤三:添加样式
如果需要对下拉菜单的样式(如显示 / 隐藏、 hover 效果等)进行自定义,可在主题的样式文件menu.styl中添加相关 CSS 规则。示例:
查看代码
1 | // 导航区域菜单容器样式 |
步骤四:重启 Hexo 服务
修改完成后,在终端中执行 hexo clean && hexo s 命令,清理并重新启动 Hexo 本地服务,然后在浏览器中查看效果,“更多” 处应能正常显示下拉菜单。
由于搜索栏遮盖了下拉菜单,需要修改下拉菜单支持滚动模式,容器固定3行高度,上移一段距离。
图标也不能正常显示,凑合用吧。
9.3 网站设置
- 根目录配置文件中,修改以下内容。
1 | title: #博客名称 |
网站标题艺术字设置
在主题source目录下新建
art-title.css,新增以下内容art-title.css 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35div.main {
/* 中英文统一手写字体(保持风格一致) */
font-family: "Ma Shan Zheng", "Pacifico", cursive ;
font-size: 36px ;
font-weight: normal ;
line-height: 1.3 ;
/* 红色到紫色渐变(主色调调整) */
background: linear-gradient(135deg, #ff6b6b, #4ecdc4, #8e44ad, #f39c12) ;
background-size: 70% 70% ; /* 适配渐变流动动画 */
-webkit-background-clip: text ;
background-clip: text ;
color: transparent ; /* 核心:文字透明显示渐变 */
/* 阴影增强层次感 */
text-shadow: 0 2px 5px rgba(0,0,0,0.15) ;
/* 渐变流动动画 */
animation: gradientShift 7s ease infinite ;
display: inline-block ;
}
/* 动画关键帧 */
@keyframes gradientShift {
0% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
100% { background-position: 0% 50%; }
}
/* 悬停强化效果 */
div.main:hover {
text-shadow: 0 3px 8px rgba(0,0,0,0.2) ;
transform: scale(1.05) ;
transition: all 0.3s ease ;
}然后在根目录配置文件增加以下内容,将中英文手写字体和art-title.CSS引入head标签内。
1 | inject: |
9.4 网页小图标
让豆包生成一个logo图标,修改为成128x128px,像素小加载快。
然后在根目录配置文件增加以下内容,将Favicon图标引入head标签内。
blog/_config.yml 1
2
3inject:
head:
- <link rel="icon" href="https://u.sam7.top/6QcmtF" type="image/avif"> # Favicon图标引入效果展示
10. 顶部导航栏显示异常
浏览器设置浅色模式,主题切换为深色,顶部导航栏字体看起来比较奇怪,navbra.styl修改,.navbar-blur取消模糊效果。
1 | // 顶栏容器样式(替代newblur()的背景) |
11. 页面布局调整
- 在主题样式
custom.styl中添加$leftbar-bottom-margin = 20px),调整主内容界面宽度为1080px,侧边栏宽度最大为277px,元素内部和外部距离都调整为15px。
1 | $leftbar-bottom-margin = 20px // 左侧栏底部距离(根据需求调整,单位px/rem) |
- 同时还需要在layout.styl中添加如下内容,高度随内容自适应,且底部有适度留白,兼顾功能和美观。
1 | // 普通屏幕布局 |
- 调整后页面整体效果如下
12. 添加音乐播放器
12.1 简单使用
参考 stellar主题使用meetingjs接入aplayer音乐播放器 - BoBoBlog
首先需要安装音乐播放器插件,在根目录主题配置文件里面添加以下内容,开启metingjs。
1 | aplayer: |
在想要添加音乐播放器的位置添加以下代码块,这是一个md格式的网易云歌单,有时候会和toc有冲突,无法实现跳转。
1 | {% meting "14222331844" "netease" "playlist" "autoplay" "mutex:true" "listmaxheight:340px" "lrctype:0" "preload:none" "theme:#1cd0fd" "storagename:metingjs"%} |
12.2 吸底音乐播放器
主题配置文件中增加以下内容,在layout.ejs </body>标签前面添加 meting-js 吸底播放器代码,实现全站底部音乐歌单,默认静音、切换页面不中断,还是和toc有冲突,无法实现跳转。
1 | html += `<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.css"><script src="https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.js"></script><script src="https://cdn.jsdelivr.net/npm/meting@2/dist/Meting.min.js"></script><meting-js class="aplayer" server="netease" type="playlist" id="3136952023" fixed="true" autoplay="false" theme="#2980b9" loop="all" order="list" preload="auto" volume="0.1" lrc-type="0"></meting-js>` |
12.3 aplayer配色修改
修改主题样式文件aplayer.styl,修改播放器参数,播放器颜色跟随系统主题。
查看代码
1 | .md-text |
13. 背景动态设置
13.1 随机线条效果
主题文件layout.ejs文件中添加以下代码
1 | <script type="text/javascript"color="0,0,255" opacity='0.7' zIndex="-2" count="99" src="//cdn.bootcss.com/canvas-nest.js/1.0.0/canvas-nest.min.js"></script> |
color:线条颜色, 默认:'0,0,0';三个数字分别为(R,G,B)opacity: 线条透明度(0~1), 默认:0.5count: 线条的总数量, 默认:150zIndex:背景的z-index属性,CSS属性用于控制所在层的位置, 默认:-1
终端运行hexo clean 清除缓存,hexo g&hexo s渲染网页后本地预览。
手机端显示很乱,影响阅览网页,可以减少线条数或者移动端适配减少线条数量。
13.2 随机樱花效果
参考以下文章,修改成可以替换任意图像元素效果。
base64图片太长了,占用空间大,提取base64编码转换成图片,上传图床。
新建sakura.js文件
代码折叠
1 | class Sakura { |
14. 文章路由
参考博主BoBoBlog文章
使用Hexo和Stellar搭建个人博客网站【超详细贴心保姆级教程💖】 - BoBoBlog
能够解决中文网页标题转义的现象,并且创建文章自动添加abbrlink
在 blog/_config.yml 中找到对应 permalink 标签,进行修改即可:
1 | url: sam7.top |
使用了这个每使用命令新建一篇文章会在头代码上插入abbrlink:及对应的转码后的代码,
这使得他会自动去匹配每个md文件的头代码中的abbrlink
不同算法、进制生成的链接格式如下:
| 算法 | 进制 | 生成链接示例 |
|---|---|---|
| crc16 | hex | https://yourname.github.io/p/66c8.html |
| crc16 | dec | https://yourname.github.io/p/65535.html |
| crc32 | hex | https://yourname.github.io/p/8ddf18fb.html |
| crc32 | dec | https://yourname.github.io/p/1690090958.html |
15. 主题深浅色切换
参考博主BoBoBlog,主题颜色设置为自动。
1 | style: |
15.1 功能实现
首先在 主题配置文件中footer.social处增加“主题切换”按钮配置,图标为半圆,点击可用于一键切换深浅色。
1 | footer: |
下一步需要在前端JS中实现主题切换功能,并为页脚“主题切换”按钮绑定点击事件。
在main.js末尾增加如下代码,实现以下功能,默认跟随系统颜色变化,单击按钮切换主题深浅色。
查看代码
1 | // 主题切换按钮逻辑 |
15.2 主题颜色调整
深浅色主题、侧边栏、卡片、代码块颜色调整,将theme_base.styl主题基本颜色修改成如下内容。
查看代码
1 | // 通用 hsla 函数 |
主题配置文件中修改如下
1 | leftbar: |
15.3 其他
waline评论和aplayer播放器都有适配,由于篇幅问题,对应章节都有描述。
16. AI摘要
stellar集成tianti GPT,付费的,洪墨AI这里购买添加key就好了,绑定网页。
1 | # AI 摘要 |
17. 字体设置
Maple Mono NF-CN - ZeoSeven Fonts (ZSFT)
根目录配置文件中,最后一行加入以下指令:
1 | inject: |
在主题配置文件中找到 style.font-family,修改以下内容:
1 | style: |
18. 域名申请
【EU.ORG】免费域名
Cloudflare 解析 ORG 域名 - YOLOのBLOG
提交域名申请已经过去一个月了,还没通过审核,石沉大海了。
[Cloudns]免费二级域名
人人有份!免费领取一个永久域名并托管到Cloudflare做双向解析 - 知乎
Cloudns二级域名Cloudflare和Vercel无法解析,只能在Cloudns使用DNS记录。
Github可以重定向,域名没有时间限制,但证书只有三个月,不知道会不会续签。
[DigitalPlat]免费域名
DigitalPlat免费二级域名注册和Cloudflare托管教程-CSDN博客
DigitalPlat最多可以申请两个域名,只有一年使用期限,小于180天可以续期,虽然是二级域名,但可以被cloudflare、vercel托管。
购买域名
国内价格对比了几家都差不太多,阿里云要便宜些,top域名比较便宜第一年8块10年240块,有活动可以更优惠。
19. RSS订阅
参考博主BoBoBlog
安装可用于搜索引擎和友链拉取动态插件
根目录下配置文件添加如下内容
1 | feed: |
然后在主题配置文件中加入以下内容,添加左侧栏footer小图标:
1 | footer: |
20. 关于、留言板
在博客源文件夹source中,新建about和messages文件夹,在相应文件夹中新建index.md,或者直接在源文件夹下面新建about.md和messages.md,markdown内容即为展示内容,使用时直接用/about /messages指定路径。
1 | # 这里配置子菜单,使用 nested 字段 |