事情是这样的

最近一段时间,博客使用的cdn.jsdelivr.net域名在国内无法访问了,找了几种替换方案。butterfly主题的event/config.js中有默认配置,主题配置文件_config.butterfly.yaml中有配置项,可以修改默认配置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# CDN
# Don't modify the following settings unless you know how they work
# 非必要請不要修改
CDN:
# The CDN provider of internal scripts (主題內部 js 的 cdn 配置)
# option: local/jsdelivr
# Dev version cannot choose jsdelivr (dev版的主題不能設置為 jsdelivr)
internal_provider: local
# The CDN provider of third party scripts (第三方 js 的 cdn 配置)
# option: local/jsdelivr
# when set it to local, you need to install hexo-butterfly-extjs
third_party_provider: jsdelivr
option:
main_css: /css/index.css
main: /js/main.js
utils: /js/utils.js
translate: /js/tw_cn.js
local_search: /js/search/local-search.js
algolia_js: /js/search/algolia.js
algolia_search_v4: 'https://fastly.jsdelivr.net/npm/algoliasearch@4/dist/algoliasearch-lite.umd.js'
instantsearch_v4: 'https://fastly.jsdelivr.net/npm/instantsearch.js@4/dist/instantsearch.production.min.js'
pjax: 'https://fastly.jsdelivr.net/npm/pjax/pjax.min.js'
gitalk: 'https://fastly.jsdelivr.net/npm/gitalk@latest/dist/gitalk.min.js'
gitalk_css: 'https://fastly.jsdelivr.net/npm/gitalk/dist/gitalk.min.css'
blueimp_md5: 'https://fastly.jsdelivr.net/npm/blueimp-md5/js/md5.min.js'
valine: 'https://fastly.jsdelivr.net/npm/valine/dist/Valine.min.js'
disqusjs: 'https://fastly.jsdelivr.net/npm/disqusjs@1/dist/disqus.js'
disqusjs_css: 'https://fastly.jsdelivr.net/npm/disqusjs@1/dist/disqusjs.css'
twikoo: 'https://fastly.jsdelivr.net/npm/twikoo@1/dist/twikoo.all.min.js'
waline_js: 'https://fastly.jsdelivr.net/npm/@waline/client/dist/waline.js'
waline_css: 'https://fastly.jsdelivr.net/npm/@waline/client/dist/waline.css'
sharejs: 'https://fastly.jsdelivr.net/gh/overtrue/share.js@master/dist/js/social-share.min.js'
sharejs_css: 'https://fastly.jsdelivr.net/npm/social-share.js/dist/css/share.min.css'
mathjax: 'https://fastly.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js'
katex: 'https://fastly.jsdelivr.net/npm/katex@latest/dist/katex.min.css'
katex_copytex: 'https://fastly.jsdelivr.net/npm/katex@latest/dist/contrib/copy-tex.min.js'
katex_copytex_css: 'https://fastly.jsdelivr.net/npm/katex@latest/dist/contrib/copy-tex.css'
mermaid: 'https://fastly.jsdelivr.net/npm/mermaid/dist/mermaid.min.js'
canvas_ribbon: 'https://fastly.jsdelivr.net/npm/butterfly-extsrc@1/dist/canvas-ribbon.min.js'
canvas_fluttering_ribbon: 'https://fastly.jsdelivr.net/npm/butterfly-extsrc@1/dist/canvas-fluttering-ribbon.min.js'
canvas_nest: 'https://fastly.jsdelivr.net/npm/butterfly-extsrc@1/dist/canvas-nest.min.js'
activate_power_mode: 'https://fastly.jsdelivr.net/npm/butterfly-extsrc@1/dist/activate-power-mode.min.js'
fireworks: 'https://fastly.jsdelivr.net/npm/butterfly-extsrc@1/dist/fireworks.min.js'
click_heart: 'https://fastly.jsdelivr.net/npm/butterfly-extsrc@1/dist/click-heart.min.js'
ClickShowText: 'https://fastly.jsdelivr.net/npm/butterfly-extsrc@1/dist/click-show-text.min.js'
lazyload: 'https://fastly.jsdelivr.net/npm/vanilla-lazyload/dist/lazyload.iife.min.js'
instantpage: 'https://fastly.jsdelivr.net/npm/instant.page@5/instantpage.min.js'
typed: 'https://fastly.jsdelivr.net/npm/typed.js/lib/typed.min.js'
pangu: 'https://fastly.jsdelivr.net/npm/pangu@4/dist/browser/pangu.min.js'
fancybox_css_v4: 'https://fastly.jsdelivr.net/npm/@fancyapps/ui/dist/fancybox.css'
fancybox_v4: 'https://fastly.jsdelivr.net/npm/@fancyapps/ui/dist/fancybox.umd.js'
medium_zoom: 'https://fastly.jsdelivr.net/npm/medium-zoom/dist/medium-zoom.min.js'
snackbar_css: 'https://fastly.jsdelivr.net/npm/node-snackbar/dist/snackbar.min.css'
snackbar: 'https://fastly.jsdelivr.net/npm/node-snackbar/dist/snackbar.min.js'
fontawesomeV6: 'https://fastly.jsdelivr.net/npm/@fortawesome/fontawesome-free@6/css/all.min.css'
flickr_justified_gallery_js: 'https://fastly.jsdelivr.net/npm/flickr-justified-gallery@2/dist/fjGallery.min.js'
flickr_justified_gallery_css: 'https://fastly.jsdelivr.net/npm/flickr-justified-gallery@2/dist/fjGallery.min.css'
aplayer_css: 'https://fastly.jsdelivr.net/npm/aplayer@1/dist/APlayer.min.css'
aplayer_js: 'https://fastly.jsdelivr.net/npm/aplayer@1/dist/APlayer.min.js'
meting_js: 'https://fastly.jsdelivr.net/gh/metowolf/MetingJS@1.2/dist/Meting.min.js'
prismjs_js: 'https://fastly.jsdelivr.net/npm/prismjs@1/prism.min.js'
prismjs_lineNumber_js: 'https://fastly.jsdelivr.net/npm/prismjs@1/plugins/line-numbers/prism-line-numbers.min.js'
prismjs_autoloader: 'https://fastly.jsdelivr.net/npm/prismjs@1/plugins/autoloader/prism-autoloader.min.js'

免费CDN

fastly.jsdelivr.net

通过fastly.jsdelivr.netCDN替换原来的cdn.jsdelivr.net是最方便的,只需要将二级域名cdn替换为fastly即可。

上面配置项,是我当前博客使用的配置方案。

npm.elemecdn.com

通过npm.elemecdn.com替换默认方案时,需要特别注意,将资源链接中的cdn.jsdelivr.net/npm一并替换为npm.elemecdn.com

举例:algolia_search_v4的配置默认为:https://cdn.jsdelivr.net/npm/algoliasearch@4/dist/algoliasearch-lite.umd.js,我们需要改为:
https://npm.elemecdn.com/algoliasearch@4/dist/algoliasearch-lite.umd.js

cdn.bootcdn.net

cdn.bootcdn.net的替换方案,需要自己去搜索js包资源,找到链接复制替换,大多数情况下,后面的path也不一致。

举例:搜索disqus资源,我们找到如下资源链接:

https://cdn.bootcdn.net/ajax/libs/disqusjs/1.3.0/disqus.min.js

部分资源在bootcdn中并没有,需要结合其他CDN一起。

cdnjs.cloudflare.com

cdnjs.cloudflare.com的替换方案和cdn.bootcdn.net类似。

cdn.bytedance.com

字帖跳动的CDN资源地址,替换方案同cdn.bootcdn.net