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

如何无需导入特定图片,从静态文件夹动态加载图片?

动态加载静态文件夹中的图片(无需提前导入)

问题场景

我在static/assets/gear-img路径下存放了大量图片,需要在Svelte组件中动态使用——组件无法预知要显示的具体图片,图片名称由父页面传入的属性决定。

父页面代码

{#each setup as theGear}
 <Gear name="{theGear.name}" icon="{theGear.icon}" desc="{theGear.desc}"/>
{/each}

其中theGear是数组setup中的对象,theGear.icon为图片名称字符串(不含.png后缀)。

Gear组件代码(原写法,无法正常加载)

<script lang="ts">
export let name: string;
export let icon: string;
export let desc: string;
</script>

<img src="static/assets/gear-img/{icon}.png" alt="" />

问题

上述写法无法正确解析图片路径,导致图片加载失败。


解决方案

方法1:使用根路径直接访问(适用于静态资源部署在根目录)

静态文件夹(static)中的内容会被构建工具直接复制到输出目录的根路径,因此可以去掉路径中的static前缀,直接使用绝对路径:

<script lang="ts">
export let name: string;
export let icon: string;
export let desc: string;
</script>

<img src="/assets/gear-img/{icon}.png" alt={name} />

这种方式简单直接,适合确定静态资源部署在根域名下的场景。

方法2:使用import.meta.url构建绝对路径(跨环境通用方案)

如果需要适配子路径部署等不同环境,可以通过new URL结合import.meta.url生成可靠的资源路径,确保开发和生产环境都能正常解析:

<script lang="ts">
export let name: string;
export let icon: string;
export let desc: string;

// 根据组件实际位置调整相对路径层级
const getImagePath = (iconName: string) => {
  return new URL(`../static/assets/gear-img/${iconName}.png`, import.meta.url).href;
};
</script>

<img src={getImagePath(icon)} alt={name} />

注意:../static的层级需要根据Gear组件在项目中的位置调整,确保能正确指向静态文件夹内的图片。


内容的提问来源于stack exchange,提问作者Lars Lehmann

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 08:35:21