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

React项目中路径正确的本地图片无法在浏览器显示问题咨询

React项目JSON存储路径加载本地图片失败原因及解决方案

根本原因

这个问题是webpack的静态资源编译机制导致的:

  • import和require都是编译时执行的静态语法,webpack会在代码编译阶段就识别引入的资源路径,把对应图片打包到产物目录,同时返回最终可访问的资源路径。
  • 你直接把路径字符串存在JSON里,属于运行时才会拿到的动态变量,webpack编译阶段无法识别这个路径对应的资源,不会把图片打包进产物,自然运行时无法加载。
  • 直接把JSON里的相对路径赋值给src也会失效:浏览器解析相对路径是相对于当前页面的URL,而非源码文件的存储位置,路径匹配不上自然404。

可行解决方案

方案1:把路径配置从JSON改为JS文件

JSON不支持执行表达式,你可以把配置改成.js后缀的模块,直接在路径外层包require:

// 配置文件 config.js
module.exports = {
  images: {
    mobil: require("./images/portfolio/desktop/finshed-next.png"),
    tablet: require("./images/portfolio/tablet/finshed-next.png"),
    desktop: require("./images/portfolio/desktop/color.png"),
  }
}

业务代码里直接使用即可:

import config from './config.js'
<img src={config.images.desktop} alt={title} />

方案2:把图片放到public目录下

把所有图片移到项目根目录的public文件夹中,JSON里存储相对于public目录的绝对路径:

// 原JSON配置
images: {
  mobil: "/images/portfolio/desktop/finshed-next.png",
  tablet: "/images/portfolio/tablet/finshed-next.png",
  desktop: "/images/portfolio/desktop/color.png",
}

直接赋值给src即可,public下的资源不会被webpack编译,会直接复制到打包产物根目录,路径完全匹配:

<img src={images.desktop} alt={title} />

方案3:require时固定前缀动态拼接后缀

如果你必须用JSON存储路径,可以把固定的路径前缀写到require里,只把可变部分存在JSON:

// JSON只存可变后缀
images: {
  mobil: "portfolio/desktop/finshed-next.png",
  tablet: "portfolio/tablet/finshed-next.png",
  desktop: "portfolio/desktop/color.png",
}

使用时静态写死前缀,webpack会提前把./images下的所有资源打包,动态拼接也能识别:

<img src={require(`./images/${images.desktop}`)} alt={title} />

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:24:04