在 react 中直接使用 json 中的相对路径引用本地图片会失败,因为 webpack 无法在运行时解析动态字符串路径;必须借助 require() 将图片作为模块显式引入,或改用 public 目录配合绝对路径。
在 react 中直接使用 json 中的相对路径引用本地图片会失败,因为 webpack 无法在运行时解析动态字符串路径;必须借助 require() 将图片作为模块显式引入,或改用 public 目录配合绝对路径。
在 React 项目中,将图片路径写在 JSON 文件里(如 "imgpath": "award1.png")看似简洁,但直接将其赋值给 会导致图片 404——这是因为浏览器无法识别相对于 JSON 文件的路径,而 Webpack 在构建时也无法自动处理动态字符串形式的资源引用。
✅ 正确做法:使用 require() 显式导入
React(基于 Webpack 或 Vite 兼容构建工具)要求本地图片必须作为模块被静态解析。因此,需将 JSON 中仅保留文件名(不带路径或仅含相对子路径),并在 JSX 中用 require() 构造完整模块路径:
// data.json
[
{
"id": 1,
"title": "Blog Title 1",
"imgpath": "award1.png"
},
{
"id": 2,
"title": "Blog Title 2",
"imgpath": "service2.png"
}
]// Blogpage.jsx
import data from "../data.json";
function Blogpage() {
return (
<div className="blogpage">
<section className="blog--section">
<div className="container">
<div className="flex-container">
{data.map((user) => (
<div className="artical--wrap" key={user.id}>
<div className="blog-content">
{/* ✅ 正确:require 静态解析,Webpack 打包时自动处理 */}
<img
src={require(`../images/${user.imgpath}`)}
alt={user.title}
loading="lazy"
/>
<h2>{user.title}</h2>
</div>
</div>
))}
</div>
</div>
</section>
</div>
);
}
export default Blogpage;⚠️ 注意事项:
shopify-app-react-router下载构建 Shopify 嵌入式应用(Embedded App)的开发技能:基于 @shopify/shopify-app-react-router + React Router v7 + Admin API 2026-04。覆盖 shopifyApp 配置、authenticate.admin 的 GraphQL/REST 调用、Webhook 校验、Session 存储、订阅计费、App Bridge 导航、部署,并新增:适用场景判断、安全最佳实践、错误处理与容错、最佳实践、常见问题 FAQ、高级场景。G
- require() 不支持完全动态路径(如 require(user.imgpath)),括号内必须是可静态分析的字符串模板(如 require(../images/${name}));
- 图片须存放在 src/ 目录下(如 src/images/award1.png),确保路径与 require() 中一致;
- 若图片放在 public/ 目录(如 public/images/award1.png),则可直接用绝对路径:src={"/images/" + user.imgpath}(无需 require),因为 public 下资源会被原样复制到构建输出中。
? 替代方案:预导入 + 映射(更健壮)
对图片数量固定、命名规范的场景,推荐在组件顶部统一 import,再通过对象映射关联 JSON 数据,避免重复调用 require:
import Blog1 from "../images/award1.png";
import Blog2 from "../images/service2.png";
import Blog3 from "../images/hero.jpg";
const imageMap = {
"award1.png": Blog1,
"service2.png": Blog2,
"hero.jpg": Blog3,
};
// 使用时:
<img src={imageMap[user.imgpath]} alt={user.title} />该方式类型安全、IDE 可跳转、构建期校验更严格,适合中大型项目。
✅ 总结
| 方式 | 路径位置 | 代码示例 | 适用场景 |
|---|---|---|---|
| require() | src/images/ | require(../images/${user.imgpath}) | 快速原型、路径规律明确 |
| public 目录 | public/images/ | src={"/images/" + user.imgpath} | 静态资源多、无需 Webpack 处理(如 SVG、图标集) |
| 预导入映射 | src/images/ | import Img1 from "..."; const map = {...} | 图片集合稳定、追求可维护性与性能 |
只要遵循“JSON 存文件名,JSX 用 require 或 public 绝对路径”原则,即可彻底解决本地图片在 JSON 驱动列表中的加载问题。


















