Hexo 自动化部署进阶:私有源码 + 公开网页的双仓库架构

AI-摘要
MuFeng GPT
AI初始化中...
介绍自己 🙈
生成本文简介 👋
推荐相关文章 📖
前往主页 🏠
前往爱发电购买
Hexo 自动化部署进阶:私有源码 + 公开网页的双仓库架构
梦幻泡影你是否担心过 Hexo 的源码(Markdown 原稿、配置文件、主题源码)直接公开在 GitHub 上会有风险?或者每次更换电脑都要重新配环境、拷文件?
今天分享一套**“双仓库”自动化部署方案**:将源码放在私有仓库,通过 GitHub Actions 自动生成网页并推送到公开的 Pages 仓库。
1. 为什么要用双仓库?
传统的 Hexo 部署方式通常是将源码和生成的 HTML 混在一起,或者只备份 HTML。双仓库架构有以下优势:
- 安全性:私有仓库(Private)存放你的 Markdown 原稿和
_config.yml,保护敏感配置和未发布的草稿。 - 云端备份:源码在云端,换电脑只需
git clone,无需担心环境丢失。 - 全自动流水线:本地只需执行
git push,剩下的环境配置、依赖安装、静态生成、发布全部由 GitHub Actions 代劳。
2. 准备工作
- 私有仓库 (source):例如
hexo-source,存放 Hexo 完整目录。 - 公开仓库 (public):例如
yourname.github.io,开启 GitHub Pages 服务。 - Personal Access Token (PAT):在 GitHub Settings 生成一个 Token,并赋予
repo权限。 - 仓库 Secret:在私有仓库的
Settings -> Secrets and variables -> Actions中,添加名为HEXO_DEPLOY_TOKEN的 Secret,值为刚才生成的 PAT。 - 本地
_config.yml的“去繁就简”:在传统的 Hexo 部署中,我们通常会在_config.yml底部配置繁琐的deploy参数。但在 GitHub Actions 方案中,为了安全和灵活,我们不再把 Token 或具体的仓库地址写死在配置文件里。
修改建议:
找到文件末尾的 deploy 部分,将其简化为最基础的格式。这样做可以防止本地执行 hexo d 时因为没有配置 SSH 而报错,同时也让配置文件更加通用。
# Deployment |
3. GitHub Actions 脚本实现
在私有仓库根目录下创建 .github/workflows/deploy.yml,填入以下代码:
name: Hexo Deploy |
3. 常见问题
1. 为什么本地不报错,云端报错?
这是最让新手崩溃的地方。
- 原因:本地的
node_modules可能是长期增量安装形成的,甚至可能手动修改过。而 GitHub Actions 每次运行都是在一个完全纯净的虚拟环境中执行npm install。如果你的package-lock.json(锁文件)没有更新,或者在package.json里用了^导致云端自动下载了不兼容的新版本(如 ESM 版本的strip-ansi),就会导致崩溃。 - 解决方法:
- 在本地确认配置了
overrides。 - 在本地执行一次
npm install以刷新package-lock.json。 - 务必将最新的
package-lock.json提交到私有仓库。 - 在 Actions 脚本中使用
npm ci严格执行同步安装。
- 在本地确认配置了
2. src refspec main does not match any
这是 Git 在推送阶段报的错。
- 原因:在 GitHub Actions 虚拟机里,当你执行
git init时,Git 的默认分支名往往是master(取决于虚拟机的 git 版本配置)。但由于我们的公开仓库(GitHub Pages)使用的是main分支,当你尝试执行git push ... main时,Git 在本地找不到叫main的内容可以推。 - 解决方法:在
git init之后,显式执行一行命令:git checkout -b main
3.优化 package.json (解决 ESM 报错)
在 Hexo 8.x 版本中,常会遇到 ERR_REQUIRE_ESM 报错。我们需要在 package.json 中强制指定兼容版本:
"overrides": { |
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果





