Hexo 避坑指南:为什么 hexo d 后线上没有新文章?

很多 Hexo 新手都会遇到这个“灵异现象”:
明明写好了 Markdown 文章,本地跑 hexo s 预览一切正常,结果执行 hexo d 部署后,打开博客一看——文章没更新
甚至有时候还会疑惑:为什么 hexo clean && hexo g && hexo s 能看到新文章,但 hexo d 就不行?

答案其实很简单:hexo d 默认不负责生成静态文件,它只负责搬运。

一、 原理解析:分工明确

Hexo 的核心命令职责划分得很清楚:

  1. hexo g (Generate)厨师
    把你的 Markdown 源文件“烹饪”成静态 HTML 文件,存放在 public 目录下。
  2. hexo d (Deploy)快递员
    public 目录里的东西打包发送到服务器(如 GitHub Pages)。
    问题出在哪?
    如果你只运行 hexo d,它只会把 public旧的文件发出去。除非你显式告诉它“先生成再部署”,否则它不会自动帮你执行 hexo g
    这就是为什么:
  • 本地 hexo s 能看到:因为你之前可能运行过 hexo gpublic 是新的。
  • 线上没更新:因为 hexo d 发送的可能是上一次生成的旧数据。

二、 正确的姿势

要解决这个问题,你有两种选择:

1. 组合拳(推荐)

使用带有生成参数的部署命令,一步到位:

1
2
3
hexo g -d
# 或者
hexo d -g
  • 含义:先生成静态文件,生成完毕后立即部署。

2. 标准流程(清晰可控)

如果你习惯每一步都心里有底:

1
2
3
hexo clean  # 清理缓存和旧文件(可选,但推荐)
hexo g # 生成新的 public 目录
hexo d # 部署新的 public 目录

三、 还有一种可能:分支配错了

如果用了 hexo g -d 还是不行,请检查 _config.yml 里的部署配置。

1
2
3
4
deploy:
type: git
repo: https://github.com/你的用户名/你的用户名.github.io.git
branch: main # 或 master,或者 gh-pages

检查点:

  • 这里的 branch 必须和你仓库在 Settings -> Pages 里设置的 Source 分支完全一致。
  • 如果 Pages 设置从 main 改成了 gh-pages,但你配置里写的还是 mainhexo d 推送再多次也不会生效。

总结

  • hexo d ≠ 自动生成。它只是搬运工。
  • 记住 hexo g -d,这能解决 90% 的“部署不生效”问题。
  • 遇到搞不定的情况,hexo clean 永远是第一步