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

React加载JSON中图片路径报错:Cannot find module '.png'

解决React中加载JSON内图片路径报错的问题

这个问题我之前碰到过,本质是React用的构建工具(比如webpack、Vite)不会自动解析JSON字符串里的图片路径——构建工具需要在编译时明确识别资源引用,而JSON里的纯文本路径只会被当作普通字符串,不会被处理成有效的模块路径。

给你几个实用的解决办法:

方法1:动态拼接路径并使用require(Create React App 适用)

在JSON文件里只存图片的文件名(比如"image": "project-cover.png"),然后在组件里用require动态加载:

{projects.map(project => (
  <div key={project.id}>
    <img 
      src={require(`../assets/images/${project.image}`).default} 
      alt={project.name} 
    />
  </div>
))}

注意:路径要相对于当前组件文件,不是相对于JSON文件。如果是CRA 2+版本,require返回的对象需要取.default才能拿到正确的URL。

方法2:用new URL动态生成路径(Vite 或 React 18+ 适用)

如果你的项目用Vite构建,或者用了新版React,可以用new URL来处理:

{projects.map(project => (
  <div key={project.id}>
    <img 
      src={new URL(`../assets/images/${project.image}`, import.meta.url).href} 
      alt={project.name} 
    />
  </div>
))}

这种方式会让构建工具正确解析路径,同时避免相对路径混乱的问题。

方法3:把图片放到public文件夹

如果不想折腾构建工具的资源解析,直接把图片放到项目根目录的public文件夹里(比如public/images/),然后在JSON里写绝对路径:

// importantProject.json
[
  {
    "id": 1,
    "name": "我的项目",
    "image": "/images/project-cover.png"
  }
]

组件里直接用这个路径:

<img src={project.image} alt={project.name} />

这种方式的好处是简单,但public文件夹里的资源不会被构建工具优化(比如压缩、哈希命名),适合图片数量不多的场景。

另外要排查下常见的小问题:

  • 确认JSON里的路径拼写没有错误,比如漏写文件后缀、大小写不对(Linux/macOS下路径区分大小写)
  • 检查图片文件确实存在于你指定的目录下

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 07:00:58