React(jsx)中 require(''xx.png) 报错 Cannot find module './xx.png' 或 img src '[object Module]'

在React应用中,使用jsx语法时,如果通过require引用图片可能会遇到'Cannot find module'的错误。错误产生的原因是url-loader默认使用esModule语法,而require是CommonJS语法。解决方法是在url-loader配置中将option.esModule设置为false。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

日常积累,欢迎指正

正文

error

react(jsx)中 require(''xx.png) 报错 Cannot find module './xx.png' 或 img src '[object Module]'

解决办法

  • 配置上设置 url-loader 的 option.esModule = false 即可,我的完整配置:
module.exports = {
  module: {
    rules: [
      {
        test: /\.(jpe?g|png|gif|webp)$/,
        use: [{
          loader: "url-loader",
          options: {
            limit: 10 * 1024,
            name: 'static/images/[hash:6].[ext]',
            fallback: 'file-loader',
            publicPath: '../',
            esModule: false,  // 新添加
          }
        }]
      }
}
  • 使用 - 注意正确写法与错误写法的细节区别
import React from 'react'

const imgPathPrefix = './images/'
const img = 'xx'
const imgFullPath = './images/xx.png'
const Com = (props) => {
    return (
            <div className = ''>
              <img src={require(`${imgPathPrefix}${img }.png`)} alt='title' />
              // <img src={require(imgFullPath )} alt='title' />
            </div>
    )
}

export default Com

注意写法

{/*正确*/}
   <img src={require(`${imgPathPrefix}${img }.png`)} alt='title' />

{/*错误*/}
   <img src={require(imgFullPath)} alt='title' />
   
{/*正确*/}
<img src={require(`${imgFullPath}`)} alt='title' />

{/*正确*/}
<img src={require('./images/xx.png')} alt={item.title} />

总之就是不能直接写路径变量

原因

  • 1、 url-loader 默认使用 esmodule 语法, require() 为 common JS,使用 require 需要设置 urlLoader.esmodul 为 false
  • 2、 require 运行时调用

require(imgFullPath)
在这里插入图片描述

在这里插入图片描述

require(${imgFullPath})
在这里插入图片描述

正常执行,没有错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值