javascript - 在 webpack React 中使用图像不起作用

标签 javascript node.js reactjs webpack

我有一个使用 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;

最佳答案

我建议删除 webpack.config.js 中的文件加载器并仅使用 url-loader,因为这两个插件的工作原理类似。据我了解,Webpack 现在使用两个加载器处理您的图像文件,正如您指定的由以下内容触发两个加载器。
测试:/\.(png|jp(e*)g|svg)$/,

当图像通过两个加载器运行时,这可能就是您在图像源中看到 module.exports = __webpack_public_path__ + "images/code.61e3a3939c2f93f30ac21419625c9a4f.jpg"; 的原因。

这就是webpack docs说说 url-loader。

url-loader works like file-loader, but can return a DataURL if the file is smaller than a byte limit.

此外,您指示 webpack 对相同的文件扩展名使用不同的文件名,这也可能会产生问题。
url-loader > name : 'images/[hash]-[name].[ext]'
文件加载器 > 名称:“images/[name].[hash].[ext]”

我已上传此GitHub repo您可以查看一下。它按照您的建议加载图像。调整 url-loader 的 limit 设置并检查源代码以查看 url 从 Base64 编码图像到 URL 的变化。

关于javascript - 在 webpack React 中使用图像不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50205296/

相关文章:

javascript - 无法将 DOM 元素附加到 DIV 节点 : Uncaught HierarchyRequestError: Failed to execute 'appendChild' on 'Node'

javascript - 使用 jQuery/JavaScript 将元素向右浮动

node.js - 如何启动新的nodejs进程

javascript - 在 npm 上使用 firebase 进行部署 --prefix $RESOURCE_DIR 运行 lint 花费的时间太长

javascript - React 如何调用 prop

javascript - 如何使用react-router创建侧边栏并设置按钮样式

Javascript 动态添加 HTML

javascript - SVGforeignObject没有捕获onClick事件(ReactJS)

javascript - Loopback.io 多重包含模型查询条件

reactjs - 如何将 React 构建文件夹部署到 Heroku