将Hexo部署到Cloudflare Pages

部署准备

  1. 新建一个私人仓库,将Hexo项目根目录.gitignore中忽略的文件(夹),其他所有源文件推送上去。
    这是我的.gitignore文件:
.gitignore
1
2
3
4
5
6
7
8
9
# Created by https://www.toptal.com/developers/gitignore/api/hexo
# Edit at https://www.toptal.com/developers/gitignore?templates=hexo

### Hexo ###
db.json
public/
.deploy_git/

# End of https://www.toptal.com/developers/gitignore/api/hexo
  1. 拥有一个 Cloudflare 账号,我就不过多赘述如何注册了。

开始部署

  1. Cloudflare仪表盘中打开Compute (Workers)->Wokers 和 Pages

  2. 创建Pages,连接你的Github账号,然后选择在部署准备中新建的仓库。例如,我这里的GMBlog。

  3. 环境变量(高级)中加入以下变量:

1
NODE_VERSION=14.3

最好是跟你的Hexo原项目环境的Nodejs版本一致,在命令提示符node -v指令查询。

  1. 直接点击保存并部署,部署成功后还无法访问,原因是我们只创建了应用但还没传入构建指令。

  2. 来到你当前Pages的设置,修改构建配置并保存。

1
2
3
4
5
# 构建命令
bash build.sh

# 构建输出目录
public

文件build.sh将在稍后创建。

  1. 继续在当前页面,修改构建系统版本并保存。
1
2
3
4
5
# 生产系统版本
版本 1

# 预览系统版本
版本 1
  1. 在你的Hexo项目根目录下新建build.sh文件,并加入以下内容:
build.sh
1
2
3
4
5
#!/bin/bash
npm install
npm update
hexo clean
hexo g
  1. 提交并推送。

  2. 至此已完成,可以在构建日志的资产已上传中看到所有静态文件。
    以后每写一篇新文章并推送上去后,都会自动进行构建和部署而无需本地构建,爽。

  3. 自定义域名略。

参考教程

  1. 将Hexo博客部署到CloudFlare Pages使用全球加速

    但我不清楚为什么这个UP主不用填任何构建命令,也许是当时的系统版本问题,也可能是他仓库里本身就是构建好的静态文件,因此我优化了下这方面。

  2. 部署Hexo博客到Cloudflare Pages

    按照Cloudflare官方的Hexo文档的说明并不能实现自动化部署,总是提示找不到hexo指令,着实令人恼火。这篇文章提供的方法完美解决了这个问题,感谢。

FAQ

Q:构建时报错fatal: No url found for submodule path 'xxx' in .gitmodules
A:检查项目文件是克隆了其他仓库,例如我在部署时就使用了pjax导致构建失败。解决方法是去到该库文件夹,也就是报错中告诉你的这个目录,删掉该库下的.git文件夹和.gitignore文件。或者你会配置.gitmodules文件就自己写吧,博主不会(つд⊂),最后重新提交和推送至仓库。

Q:xxxx.pages.dev无法访问。
A:原因你懂的,解决方法是使用自定义域。