图片相对路径获取出错

---
title: template
tags:
date: 2024-12-11 09:55:00
# 封面图
# cover: assets/Nichijou.webp
# gallery post(画廊类型文章)
# 若未设置cover,则使用photos中第一张图片作为封面图
photos:
  - /assets/高松灯.webp
  - /assets/Kirby.jpg
  - https://wallhalla.com/wallpaper/83/variant/preview/2xl
---

可以看到这篇 post 的封面会使用photos的第一张图片,即/assets/高松灯.webp

该文件目前位于/source/_data/assets/高松灯.webp目录下,但是获取错误:

{height=200px}

可以看到浏览器直接将相对路径拼接在协议后面请求,于是报错,且封面为空:

{height=200px}

但将后缀改为.jpg/assets/高松灯.webp=>/assets/高松灯.jpg,则可以获取:

{height=200px}

{height=200px}

所以很奇怪,怀疑可能和_config.yml中的image配置有关:

image:
  enable: true # 开启图片预处理和自动 WebP 化
  options:
    avif: false
    webp: true # 预留配置项,现版本无作用
    quality: 80 # 质量,支持1-100的整数、lossless或nearLossless
    effort: 2 # CPU 工作量,0-6之间的整数(越低越快)
    replaceSrc: true # 自动替换生成html中的本地图片链接为webp链接
    # 我们更建议使用 Service Worker 来在用户侧实现 replaceSrc 的功能,这将能够以一种侵入式更小的方式实现链接替换
  exclude:

:::success
解决方案:每次修改完都需要执行hexo clhexo g重新生成静态文件再启动项目
:::

启用 replaceSrc 配置项导致线上项目获取 webp 文件出错

_config.yml配置文件中有image这样一个配置,启用后可以对图片进行 webp 化

修改里面的replaceSrc配置则可以直接将插入的图片替换为对应的 webp 文件
例如,我插入的:

public中生成的:

{height=500px}

项目中请求的:

但是通过hexo clhexo g以及hexo d部署到Github Page之后,发现请求失败,原因是仓库中没有对应的webp文件,也就是没有推送上去

:::success
解决方案:执行完hexo clhexo g之后,需要再执行hexo s,再执行hexo d即可
:::

:::info
原因解释hexo g执行完之后,public只有原生图片,而webp文件则是通过hexo s生成的,所以执行完hexo s之后目录里面才会存在webp格式
:::