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

Gatsby项目中React组件循环渲染图片报[object Module]404错误如何解决

问题原因

你遇到的[object Module] 404报错是因为Gatsby内置的webpack构建工具默认开启了静态资源的ES模块导出规则,此时通过require()引入图片时,返回值是一个包裹了资源路径的模块对象,而非直接返回图片的可访问路径,实际路径存储在该模块对象的default属性中。

解决方法

方案1:直接取模块的default属性

修改img标签的src取值,追加.default即可,修改后的代码如下:

const ServiceCard = ({ title, subtitle, text, logos }) => {
    const displayLogos = logos.split(",").map((logo) => (
        <li key={logo} className="tech-logo">
            <img
                key={logo}
                src={require(`../../images/tech-logos/${logo}.png`).default}
                alt={`${logo} logo`}
                height="30px"
                width="30px"
            />
        </li>
    ));

    return (
        <div className="service-card">
            <h1 className="service-card-title">{title}</h1>
            <h2 className="service-card-subtitle">{subtitle}</h2>
            <p className="service-card-text">{text}</p>
            <ul className="tech-logo-list">{displayLogos}</ul>
        </div>
    );
};

方案2:全局关闭静态资源的ES模块导出

如果不想每次引入图片都加.default,可以在项目根目录的gatsby-node.js中修改webpack配置,关闭图片资源的esModule选项:

exports.onCreateWebpackConfig = ({ actions }) => {
  actions.setWebpackConfig({
    module: {
      rules: [
        {
          test: /\.(png|jpe?g|gif|svg)$/i,
          type: 'asset/resource',
          generator: {
            filename: 'static/images/[name].[hash][ext]',
          },
          parser: {
            dataUrlCondition: {
              maxSize: 8 * 1024,
            },
          },
          esModule: false,
        },
      ],
    },
  })
}

修改后重启开发服务,原来的require()写法就可以直接返回图片路径。

方案3:使用static目录托管静态资源

你也可以把tech-logos文件夹整体移动到项目根目录的static目录下,此时不需要使用require引入,直接写绝对路径即可:

<img
  key={logo}
  src={`/tech-logos/${logo}.png`}
  alt={`${logo} logo`}
  height="30px"
  width="30px"
/>

注意事项

Gatsby对文件名大小写敏感,请确保传入的logo字符串和实际的png文件名大小写完全匹配,比如传入React对应文件名必须为React.png,否则仍会触发404报错。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:15:04