# 图片相对路径获取出错

---
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 目录下,但是获取错误:

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

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

所以很奇怪,怀疑可能和 _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:

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

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

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

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

public 中生成的:

项目中请求的:

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

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

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