前言

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

教程

创建文件

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

增加代码

1
2
3
4
5
6
7
8
9
10
11
12
modify.js
'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);

按需修改

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

原理介绍

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

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

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

参考链接:https://android99.com/2022/05/17/butterfly-replace-cdn/