当前 Hexo 环境运行在 Docker 中,因此后续升级 Hexo 时,并不需要修改本机的 Node.js 或 Hexo 环境。
升级的核心思路是:修改项目的依赖定义和运行环境,然后通过 Docker 和 GitHub Actions 分别验证。
升级前确认
首先查看当前 Hexo 版本:
1 | docker compose run --rm hexo npx hexo version |
准备升级时,需要先确认目标 Hexo 版本的更新说明,尤其是:
- Node.js 最低版本要求;
- 是否存在 Breaking Changes;
- 现有主题是否兼容;
- 现有 Hexo 插件是否兼容;
- 配置文件格式是否发生变化。
如果只是小版本升级,通常变化较小。
如果是类似:
1 | Hexo 8 → Hexo 9 |
这样的大版本升级,则应先查看对应版本的 Migration Guide 或 Release Notes,再进行实际升级。
升级 Hexo
如果当前 Node.js 版本仍然满足新版 Hexo 的要求,可以直接在 Docker 环境中升级:
1 | docker compose run --rm hexo npm install hexo@latest |
执行后主要会修改:
1 | package.json |
其中:
1 | package.json |
记录项目使用的依赖,而:
1 | package-lock.json |
锁定实际安装的依赖版本。
正式构建时仍然通过:
1 | npm ci |
根据 lock file 恢复确定的依赖环境。
Node.js 版本发生变化
如果新版 Hexo 提高了 Node.js 最低版本要求,则除了升级 Hexo,还需要修改项目使用的 Node.js 版本。
例如 Dockerfile:
1 | FROM node:22 |
需要调整为新的目标版本。
同时 GitHub Actions 中用于构建博客的 Node.js 版本也需要保持一致。
最终应尽量保证:
1 | 本地 Docker |
两边使用相同的主要版本。
这样可以减少:
1 | 本地构建正常 |
这种环境差异问题。
重新构建 Docker 环境
修改依赖或 Node.js 版本后,需要重新 Build:
1 | docker compose up --build |
然后访问:
1 | http://localhost:4000 |
检查博客是否正常。
建议至少确认:
1 | 首页 |
如果只是普通小版本升级,可以进行基本检查。
如果是大版本升级,则应该对整个博客进行一次较完整的检查。
提交升级
本地验证正常后:
1 | git status |
如果只是升级 Hexo,通常主要变化是:
1 | package.json |
如果同时升级 Node.js,则还可能包括:
1 | Dockerfile |
确认变更后提交:
1 | git add . |
Push 后 GitHub Actions 会再次执行:
1 | 安装 Node.js |
因此整个升级过程实际上存在两次验证:
1 | 第一次 |
两次都成功后,本次升级即可完成。
不要一次升级所有依赖
如果只是希望升级 Hexo 本身,没有必要同时执行一次大范围的依赖升级。
更稳妥的方式是:
1 | 升级 Hexo |
这样如果出现兼容性问题,更容易确定是哪个组件导致。
总结
当前博客的 Hexo 环境由仓库中的文件定义:
1 | Dockerfile |
因此升级 Hexo 的本质并不是升级某台电脑上的 Hexo,而是:
1 | 确认新版要求 |
只要这些环境定义仍然保存在 Git 仓库中,即使以后更换电脑,也可以按照相同方式重新构建和升级博客环境。