Hexo静态博客升级指南(2023年版)

本文简要概述了本网站的 Hexo 与 NexT 升级过程。对于具体的细节则不会做过多解释,主要展示步骤。本文基于 Hexo静态博客升级指南(2021年版) 一文,在 2023 年再次升级。

升级前后的运行环境对比:

1
2
3
4
5
node: v16.13.0    => v18.16.1
npm: 8.1.4 => 9.5.1
hexo: 5.4.0 => 6.3.0
hexo-cli: 4.3.0 => 4.3.1
NexT: 8.8.1 => 8.17.0

准备工作

升级 Node.js

在已安装 Node.js 的情况下,推荐使用如下方法升级:

1
2
3
sudo npm install -g npm
sudo npm install -g n
sudo n stable

升级 Hexo

1
npm install -g hexo-cli

升级项目依赖包

在项目根目录下运行:

1
2
3
sudo npm i -g npm-check-updates
ncu -u
sudo npm install

其中ncu -u输出的升级列表如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
hexo                        ^5.4.0  →   ^6.3.0
hexo-blog-encrypt ^3.1.6 → ^3.1.9
hexo-deployer-git ^3.0.0 → ^4.0.0
hexo-generator-archive ^1.0.0 → ^2.0.0
hexo-generator-category ^1.0.0 → ^2.0.0
hexo-generator-index ^2.0.0 → ^3.0.0
hexo-generator-searchdb ^1.4.0 → ^1.4.1
hexo-generator-sitemap ^2.1.0 → ^3.0.1
hexo-generator-tag ^1.0.0 → ^2.0.0
hexo-renderer-ejs ^1.0.0 → ^2.0.0
hexo-renderer-markdown-it ^5.0.0 → ^7.1.0
hexo-renderer-stylus ^2.0.1 → ^3.0.0
hexo-server ^2.0.0 → ^3.0.0
hexo-theme-next ^8.13.1 → ^8.17.0
hexo-word-counter 0.0.3 → 0.1.0
katex ^0.16.3 → ^0.16.7

配置文件更新

将新版本的 NexT 配置文件与当前的配置文件做对比:

1
cp node_modules/hexo-theme-next/_config.yml _config.next.yml.template

对比 _config.next.yml_config.next.yml.template 两个文件,对不兼容的配置项做出相应修改。新版本的新增配置项也可以拷贝到当前的配置文件中。

测试与部署

运行以下命令:

1
2
3
hexo clean
hexo g
hexo s

如果遇到如下错误:

1
2
FATAL Something's wrong. Maybe you can find the solution here: https://hexo.io/docs/troubleshooting.html
Error: ENOENT: no such file or directory, open '/xxx/blog/node_modules/highlight.js/styles/tomorrow-night.css'

这是代码块主题不存在导致的。可以相应修改 _config.next.yml 中的对应部分:

_config.next.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
codeblock:
# Code Highlight theme
# All available themes: https://theme-next.js.org/highlight/
theme:
light: atom-one-light
dark: atom-one-dark
prism:
light: prism
dark: prism-dark
# Add copy button on codeblock
copy_button:
enable: true
# Available values: default | flat | mac
style: flat

因为这次升级了 Node.js 版本为 v18.16.1,因此需要将 github/workflows/main.yml 中的参数进行相应修改:node-version: "18.x"。本地测试通过后,就可以推送部署了。本次升级整体没有大改动,还是非常丝滑的。