Hexo 圖片顯示異常路徑修正紀錄
前言
最近心血來潮,想將多年未更新的 Hexo 版本從 4.1 升級到 7.0,順帶更新到最新版本的 Next Theme,在更新的過程中,無意間又發現了一個坑…
原來 Hexo 不知從何開始已經正式導入 Markdown 語法插入圖片了,所以導致在 Hexo 4.2.0 late
版本,使用 hexo-asset-image
作解決方案時會產生絕對路徑的 Bug。
要解決這個問題,最好的解決方式當然是移除 hexo-asset-image
即可,但是依照官方的設置方式,又會發生一個讓我覺得困惑的狀況…
以下為官方的建議設置方式:
使用 Markdown 嵌入圖片
hexo-renderer-marked 3.1.0 引入了一個新的選項,其允許你無需使用
asset_img
標籤插件就可以在 markdown 中嵌入圖片如需啟用:
1
2
3
4
5 _config.yml
post_asset_folder: true
marked:
prependRoot: true
postAsset: true啟用後,資源圖片將會被自動解析為其對應文章的路徑。
例如:image.jpg
位置為/2020/01/02/foo/image.jpg
,這表示它是/2020/01/02/foo/
文章的一張資源圖片,![](image.jpg)
將會被解析為<img src="/2023/11/11/Hexo_圖片顯示異常路徑修正紀錄/2020" >
。
依照上述最後一段話的敘述,你會發現所放置的圖片必須放在與文章相同的資料夾下,才能正常被解析為<img src="/2023/11/11/Hexo_圖片顯示異常路徑修正紀錄/2020" >
,如果你是將圖片放置在文章的次資料夾中,是無法被順利解析的,它所解析的路徑會變成<img src="/2023/11/11/Hexo_圖片顯示異常路徑修正紀錄/image.jpg" >
,下是一個實例。
圖片放在文章的次資料夾中如下
插入的路徑為
{% asset_img "sray Logo.jpg" "sray Logo" %}
而實際上網頁顯示圖片的路徑會變成
https://shuwn.dev/2023-11-11-Hexo_圖片顯示異常路徑修正紀錄/sray Logo.jpg
而正確的圖片路徑應解析為
https://shuwn.dev/2023/11/06/2023-11-11-Hexo_圖片顯示異常路徑修正紀錄/sray Logo.jpg
以官方原先的設置必須將圖片放在文章相同的資料夾中如下
才會取得正確的圖片路徑
https://shuwn.dev/2023/11/06/2023-11-11-Hexo_圖片顯示異常路徑修正紀錄/sray Logo.jpg
這完全不符合日常圖文管理方式,而且官方上述設定
post_asset_folder: true
,主要是讓你在利用hexo new paper
指令建立文章的同時,自動建立好資源圖片的資料夾,如果只限定需要將圖片放在與文章同個路徑下才能正常解析,這真的蠻奇怪的???
所幸我後來很快的找到了一個解決方式,我們可以保有既有的官方設置方式,在額外安裝一個 hexo-image-link
Pluge,即可解決這個問題。
按照以下步驟進行安裝
輸入以下指令安裝 hexo-image-link Pluge
1
npm install hexo-image-link --save
打開 Hexo 的 ‘_config.yml’ 進行設置,確認配置如下
1
2
3
4
5_config.yml
post_asset_folder: true
marked:
prependRoot: true
postAsset: true接下來輸入以下指令重新生成靜態網頁,現在即可正常顯示圖片了!
1
2
3hexo clean # 清除既有靜態檔案
hexo g # 重新生成靜態網頁檔案
hexo d # 重新推送檔案到伺服器