Hexo cdn.jsdelivr.net 等部分CDN引用無效的一種低成本解決方案

ljq發表於2022-06-07

問題原因:cdn.jsdelivr.net在2021年12月20號國內引用無效被重置,導致部分引用此cdn資源的hexo生成站點js依賴和錯誤頁面功能異常。

本人也遇到此問題,解決方案如下供參考:

考慮到不同的hexo站點使用的外掛各有不同,且引用的第三方js庫存在差異,故考慮採用低成本的方式解決。大概思路是在生成的部分檔案裡,替換相應的站點域名,實現在deploy之前完成檔案路徑的轉換。

舉例來說,也是本人遇到的問題,常用的js庫https://cdn.jsdelivr.net/npm/js-base64/base64.min.js

準備工作(主題icarus為例):

  • 1.下載對應的無效js檔案到本地;
  • 2.檔案放置在(對應建立CDN路徑資料夾)themes/icarus/source/npm/js-base64/base64.min.js;

站點根路徑生成常用命令封裝了一個簡單的操作命令指令碼(hexo-deploy.sh):

#!/usr/bin/env sh
# author: Jack Liu
# Description: (debug | deploy git) script

if [ "$1" == "debug" ]; then
    echo "---------------- Debug Mode ----------------"
    hexo clean && hexo s
    exit
fi

hexo clean && hexo g

echo "---------------- Invalid CDN switch local path file ----------------"
# MacOS下sed和Linux發行版之間的區別,MacOS包含備份保護機制,注意sed -i ''
find ./public -name "*.html" -type f -exec sed -i '' 's/\/\/cdn\.jsdelivr\.net\//\//g' '{}' \;

hexo d
echo 'hexo deploy run is ok !'

警告:

  • 指令碼包含替換操作!執行指令碼前請嚴格檢查命令可行性,防止誤操作。
  • MacOS下sed和Linux發行版之間的區別,MacOS包含備份保護機制,注意sed -i ‘’

執行成功後./public下路徑替換會為/npm/js-base64/base64.min.js

備註:
其他無效CDN域名引用,參考類似方法,注意sed命令轉義。

原文連結

本作品採用《CC 協議》,轉載必須註明作者和本文連結
ljq@Github

相關文章