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

React使用本地data.json存储的图片路径导入时找不到模块如何解决?

错误原因

你拼接路径的写法../.' + currentPlanet.images.planet会生成.././assets/planet-mercury.svg格式的路径,webpack在处理动态require时会自动标准化相对路径,.././会被解析为./../,和你预期的../../assets/xxx.svg路径不一致,同时webpack处理动态require需要明确的静态路径前缀来识别需要打包的资源范围,完全动态的拼接路径也会导致模块查找失败。

解决方案

方案1:修正路径拼接逻辑

先去掉json存储路径开头的./前缀,再拼接正确的静态上级路径:

const [currentPlanet,setCurrentPlanet]=useState(data[0])
const {name} = useParams();
useEffect(() => {
    const planet = data.find((item)=>item.name===name)
    setCurrentPlanet(planet);
}, [name])
// 移除路径开头的./前缀
const purePath = currentPlanet.images.planet.replace(/^\.\//, '')
// 拼接固定静态前缀,webpack会自动打包../../assets下的所有相关资源
const photo = require(`../../${purePath}`).default
return (
    <section id={planetStyle.planet}>
        <div className="container">
            <div>
                <img alt={currentPlanet.name} src={photo} />
            </div>
        </div>
    </section>
)

方案2:使用public目录托管静态资源

把所有svg图片放到项目public目录的assets文件夹下,不需要使用require导入,直接拼接绝对路径使用即可:

// 直接使用public目录下的绝对路径,无需require
const photo = `/${currentPlanet.images.planet}`

这种方式不需要处理相对路径的层级问题,更适合大量静态图片的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 18:30:06