You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SvelteKit资源处理:嵌套路由下生产/预览环境WebP图片404

SvelteKit生产环境WebP图片404(路径带页面路由前缀)

问题场景

在/about-us/social-responsibilities页面加载转换后的WebP图片时,开发环境执行npm run dev一切正常,但执行npm run preview或部署到Vercel后,图片返回404错误。排查发现图片请求路径多了/about-us前缀(实际请求/about-us/_app/immutable/assets/we-support-farmers-soldiers-17dde5c7.webp),正确路径应为/_app/immutable/assets/we-support-farmers-soldiers-17dde5c7.webp。

用到的代码示例:

<script>    
import supportImg from '$lib/assets/images/we-support-farmers-soldiers.jpg?webp';
</script>

<div>
<img src={supportImg} loading="lazy">
</div>

解决方案

方案1:配置资源根路径

在svelte.config.js中设置paths.assets为根路径,强制所有静态资源从网站根目录加载,避免路由前缀干扰:

import adapter from '@sveltejs/adapter-vercel';

/** @type {import('@sveltejs/kit').Config} */
const config = {
  kit: {
    adapter: adapter(),
    paths: {
      assets: '/'
    }
  }
};

export default config;

方案2:手动生成绝对路径

通过new URL()结合import.meta.url构建资源的绝对URL,彻底规避相对路径问题:

<script>    
import supportImg from '$lib/assets/images/we-support-farmers-soldiers.jpg?webp';
const imgUrl = new URL(supportImg, import.meta.url).href;
</script>

<div>
<img src={imgUrl} loading="lazy">
</div>

方案3:结合BASE_URL拼接路径

利用SvelteKit内置的import.meta.env.BASE_URL环境变量,拼接出正确的根路径资源地址:

<script>    
// 加上&url后缀获取资源路径字符串
import supportImg from '$lib/assets/images/we-support-farmers-soldiers.jpg?webp&url';
const imgUrl = `${import.meta.env.BASE_URL}${supportImg}`;
</script>

<div>
<img src={imgUrl} loading="lazy">
</div>

内容的提问来源于stack exchange,提问作者Nilesh G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 04:06:13