前言

在使用 Hexo 搭建博客的过程中,如果站点接入了 CDNESA 服务用于内容加速,往往会遇到一个常见问题:每次部署更新后,边缘节点上仍然保留着旧的缓存资源,导致用户访问时无法即时看到最新内容。尽管可以通过登录控制台手动刷新缓存来解决该问题,但这种方式显得较为繁琐,尤其在频繁部署的场景下,操作成本较高。
为此,我开发了一款 Hexo 插件 —— hexo-aliyun-cache-refresh,它能够在 Hexo 部署流程结束后,自动调用阿里云 CDNESA 的刷新接口,按需清除指定路径的缓存,从而实现缓存更新的自动化处理,极大地简化了部署流程,提升了效率。
需要说明的是,当前版本的插件并未实现通过对比部署前后文件差异来选择性刷新缓存的功能。这主要是出于实用性考虑——我个人在日常使用中,习惯于部署完成后直接刷新整个目录,因此并未在此处进行额外优化。后续若有需要,也可考虑补充此类能力以提升刷新效率。

✨ 插件特性

  • 🌀 自动触发:部署 (hexo deploy) 后自动刷新缓存;
  • 🌐 多服务支持:支持刷新阿里云 CDN 和边缘计算加速平台 ESA;
  • 📁 文件/目录灵活刷新:支持精确到某个文件或整目录的刷新;
  • 💡 多路径配置:支持多条刷新路径,独立配置类型与服务;
  • 🧰 开箱即用:安装后简单配置即可使用,部署流程无感集成。

📦 安装方法

在 Hexo 项目根目录中执行:

1
npm install hexo-aliyun-cache-refresh --save

插件配置

在主配置文件 _config.yml(或主题配置文件中)添加:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
aliyun_cdn_refresh:
enable: true
accessKeyId: YOUR_ACCESS_KEY_ID
accessKeySecret: YOUR_ACCESS_KEY_SECRET
siteId: 810543187184144 # ESA 所需,登录阿里云控制台获取
paths:
- url: "https://www.aimiliy.top/"
type: Directory
service: CDN
- url: "https://www.aimiliy.top/index.html"
type: File
service: ESA
- url: "https://www.aimiliy.top/assets/img/logo.png"
type: File

⚠️ 注意事项

  • type 仅支持 File 或 Directory(区分大小写);
  • Directory 类型的路径必须以 / 结尾;
  • service 可填 CDN 或 ESA,默认值为 CDN;
  • 建议将博客仓库设置为私有以避免泄露 AccessKey。

🚀 使用方式

执行以下命令部署:

1
hexo clean && hexo g && hexo d

部署完成后,插件将自动读取配置并刷新 CDN / ESA 缓存,无需额外命令。

📚 相关文档

结果示例

1
2
3
4
5
6
INFO  [alicdn-refresh] 部署完成,开始刷新阿里云缓存...
INFO [alicdn-refresh] 刷新中: https://miraii.cn/ (Directory, ESA)
[alicdn-refresh] 刷新成功: https://miraii.cn/,任务 ID: 1688620425543688,请求 ID: 54870F3F-30DD-57E3-B384-19897834130B
INFO [alicdn-refresh] 刷新中: https://www.aimiliy.top/ (Directory, CDN)
[alicdn-refresh] 刷新成功: https://www.aimiliy.top/,任务 ID: 20885846658,请求 ID: 651084FA-929D-59ED-935E-3F80BFFF3C25
INFO [aliyun-cache] 缓存刷新任务完成

总结

hexo-aliyun-cache-refresh 插件实现逻辑较为简单,主要是在 Hexo 部署完成后,自动调用阿里云 CDNESA的接口进行缓存刷新,避免了手动操作的繁琐。该插件已发布至 NPM,后续将持续完善和优化功能。