javascript 在webpack react中使用图像将无法正常工作

oalqel3c  于 2023-04-10  发布在  Java
关注(0)|答案(2)|浏览(94)

我有一个使用webpack和react的项目。我使用file-loader / url-loader来使用webpack/react设置中的图像。在我的react项目中,我做了import Img from '/image/source/image.jpg',但如果尝试<img src={Img}>,src是一个base64代码,它说module.exports = __webpack_public_path__ + "images/code.61e3a3939c2f93f30ac21419625c9a4f.jpg";,没有图像显示。我如何解决这个问题?

webpack.config.js

var webpack = require( 'webpack' )
var path = require( 'path' )

var BUILD_DIR = path.resolve( __dirname, 'src/client/public' );
var APP_DIR = path.resolve( __dirname, 'src/client/App' );

var config = {
  mode : 'development',
  entry : APP_DIR + '/index.jsx',
  output : {
    path : BUILD_DIR,
    filename : 'bundle.js'
  },

  devServer : {
    publicPath : '/',
    contentBase : './src/client'
  },

  module : {
    rules : [
      {
        test : /\.jsx|js?/,
        include : APP_DIR,
        exclude : /(node_modules)/,
        loader : 'babel-loader',
        query : {
          presets : [ 'env', 'react' ]
        }
      },

      {
        test : /\.scss|.css$/,
        loaders : [ 'style-loader', 'css-loader', 'sass-loader' ]
      },

      {
        test : /\.(png|jp(e*)g|svg)$/,
        use : [{
          loader : 'url-loader',
          options : {
            limit : 8000,
            name : 'images/[hash]-[name].[ext]'
          }
        }]
      },

      {
        test : /\.(png|jp(e*)g|svg)$/,
        use : {
          loader: "file-loader",
          options: {
            name: "images/[name].[hash].[ext]"
          }
        }
      }
    ]
  }
};

module.exports = config;
rm5edbpk

rm5edbpk1#

我建议删除webpack.config.js中的file-loader,只使用url-loader,因为这两个插件的工作方式相似。据我所知,Webpack现在使用两个loader处理您的图像文件,因为您指定两个loader由以下内容触发。
test : /\.(png|jp(e*)g|svg)$/,
由于图像在两个加载器中运行,这可能是您看到module.exports = __webpack_public_path__ + "images/code.61e3a3939c2f93f30ac21419625c9a4f.jpg";作为图像源的原因。
下面是webpack docs关于url加载器的说明。
url-loader的工作方式类似于file-loader,但如果文件小于字节限制,则可以返回DataURL。
此外,您指示webpack为相同的文件扩展名使用不同的文件名,这也可能会产生问题。
url加载器〉name : 'images/[hash]-[name].[ext]'
file-loader〉name: "images/[name].[hash].[ext]"
我已经上传了这个GitHub repo,你可以查看。它会按照你的建议加载图像。调整url加载器的limit设置,并检查源代码,看看url从base64编码的图像变成了URL。

d6kp6zgx

d6kp6zgx2#

用于webpack 5

webpack.config.js { test:/.(png|jpe?g|GIF|EOT|woff2|沃夫|ttf|svg)$/i,键入:'资产/资源',},

相关问题