前言

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

部署

安装插件

1
npm install hexo-alicdn-refresher --save

配置文件添加信息

hexo项目的配置文件下或者主题的配置文件中添加以下配置:

1
2
3
4
5
6
7
8
9
10
aliyun_cdn_refresh:
accessKeyId: '你的阿里云 AccessKeyId'
accessKeySecret: '你的阿里云 AccessKeySecret'
paths:
- type: Directory
url: 'https://miraii.cn/' # 刷新整个目录
- type: File
url: 'https://miraii.cn/js/main.js' # 刷新指定的文件
- "https://miraii.cn/assets/img/xxx.png" # 刷新文件,可以无需指定type和url
- "https:/miraii.cn/assets/img/xxx.jpg"

⚠️ 为了安全起见,建议项目private,以免密钥泄露。
⚠️ type为Directory时,url必填带/

插件工作原理

插件会监听 hexo deploy 执行完毕后的 deployAfter 事件,自动触发 CDN 缓存刷新请求。

结果示例

1
2
3
4
INFO  [alicdn-refresh] 部署完成,开始刷新阿里云 CDN 缓存...
INFO [alicdn-refresh] 刷新中: https://miraii.cn/ (Directory)
INFO [alicdn-refresh] 刷新成功: https://miraii.cn/
INFO [alicdn-refresh] 缓存刷新任务完成

总结

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