如果你的 Butterfly 版本高于 4.3.0,则主题自带 CDN 自定义格式功能。
可参考 主题文档的 CDN 部分 进行配置,无需继续以下步骤。

自从 jsDelivr 速度下降后,现在连访问也出现了问题。
所以分享个利用 Hexo 的 插件 系统,批量替换 Butterfly 主题 CDN 的方法。

步骤

创建文件

创建一个 JavaScript 脚本文件,放到 scripts 文件夹。

增加代码

请根据主题版本选择。

modify.js
1
2
3
4
5
6
7
8
9
10
11
'use strict';
const { filter } = hexo.extend;

// 替换 CDN
filter.register('before_generate', () => {
const { asset } = hexo.theme.config;
for (const name in asset) {
asset[name] = asset[name]
.replace('//cdn.jsdelivr.net/npm/', '//npm.elemecdn.com/');
}
}, 11);
modify.js
1
2
3
4
5
6
7
8
9
10
11
'use strict';
const { filter } = hexo.extend;

// 替换 CDN
filter.register('before_generate', () => {
const { CDN } = hexo.theme.config;
for (const name in CDN) {
CDN[name] = CDN[name]
.replace('//cdn.jsdelivr.net/npm/', '//npm.elemecdn.com/');
}
}, 11);

按需修改

根据需要更改 replace 方法的参数,上文是将 jsDelivr 替换为 饿了么。

原理

参考 Butterfly 主题 4.2.2 版本 config.js 的代码。
主题会在运行时,根据配置文件动态生成链接并增加到配置中。
那么我们只需要再用相同的方式,微调一下就能做到批量替换了。

在 Hexo 注册 before_generate 过滤器,设置优先级为 11。
触发时,遍历配置中的 asset 选项并替换链接。

过滤器 的默认优先级是 10,所以我们设置成 11。
确保等主题处理完配置之后再运行。