前言

  Netlify 本身是支持 GitHub 上传后自动构建的,但是每次构建完毕后都需要到 CDN 手动刷新缓存,这着实是一件麻烦事。

  所以我便想到了使用 CDN 提供的 API 完成自动刷新缓存,那么如何调用 API 呢?答案就是通过 Netlify 的 Functions 完成自动化。

教程

  我们假设读者在阅读本篇时,已经在 Netlify 上部署了网站,如果不会部署,可以见:《从零开始搭建博客》

  首先,我们需要确定你使用的 CDN 是否支持 API 调用,如果支持的话,打开 CDN 的官网就能找到相关的文档。

  首先,我们需要在博客的根目录中创建 Netlify functions,默认的目录是:[root]\netlify\functions\(你也可以在 Netlify 中自定义目录),在这个目录下创建一个名为deploy-succeeded.js的 js 文件,然后输入以下内容:

注意:因为代码中包含您的 token 或密码等敏感信息,请妥善保存代码!
注意:因为代码中包含您的 token 或密码等敏感信息,请妥善保存代码!
注意:因为代码中包含您的 token 或密码等敏感信息,请妥善保存代码!

  首先运行指令安装需要的插件:

1
npm install cdn-refresher --save

  目前插件支持刷新多吉云、又拍云、阿里云、华为云的 CDN 缓存,按照如下格式使用即可:

1
2
3
4
5
6
7
8
9
const refresher = require('cdn-refresher')

exports.handler = () => refresher.refreshDogeCloud({
accessKey: '你的 key',
secretKey: '你可 secret',
rtype: 'path',
urls: ['https://example.com/*']
}).then(() => console.log('CDN 缓存刷新成功'))
.catch(err => console.error(err))
1
2
3
4
5
6
7
8
9
const refresher = require('cdn-refresher')

// 这个代码尚未测试是否可用,如果有小伙伴尝试了该代码请在评论区反馈一下能不能用
exports.handler = () => refresher.refreshUpyun({
username: '用户名',
password: '密码',
urls: ['https://example.com/*']
}).then(() => console.log('CDN 缓存刷新成功'))
.catch(err => console.error(err))
1
2
3
4
5
6
7
8
9
10
11
12
const refresher = require('cdn-refresher')

// 这个代码尚未测试是否可用,如果有小伙伴尝试了该代码请在评论区反馈一下能不能用
exports.handler = () => refresher.refreshAli({
accessKey: '你的 key',
accessSecret: '你的 secret',
objectType: 'Directory',
objectPaths: ['example.com/'],
// 当回源内容和源站资源对比后不一致时,是否刷新对应目录下的资源。
force: false
}).then(() => console.log('CDN 缓存刷新成功'))
.catch(err => console.error(err))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
const refresher = require('cdn-refresher')

// 这个代码尚未测试是否可用,如果有小伙伴尝试了该代码请在评论区反馈一下能不能用
exports.handler = () => refresher.refreshHuawei({
// endPoint 的获取见:https://support.huaweicloud.com/api-cdn/cdn_02_0026.html#cdn_02_0026__table18327155514612
endPoint: 'cdn.myhuaweicloud.com',
// 获取 ak/sk 见: https://support.huaweicloud.com/devg-apisign/api-sign-provide-aksk.html
ak: 'xxx',
sk: 'xxx',
refreshType: 'directory',
mode: 'detect_modify_refresh',
urls: ['https://example.com/']
}).then(() => console.log('CDN 缓存刷新成功'))
.catch(err => console.error(err))

  如果你实在不会写代码,也可以在评论区留言你的 CDN 服务商名称,我有时间了会写好加在博文中。

  注意:Netlify Functions 是有免费额度的,但是只用来刷新 CDN 缓存的话一般是用不完的,详情请见 Netlify 官方文档。


创作不易,扫描下方打赏二维码支持一下吧ヾ(≧▽≦*)o