【问题标题】:How to serve static Image path in img tag with webpack in React JS application如何在 React JS 应用程序中使用 webpack 在 img 标签中提供静态图像路径
【发布时间】:2017-06-13 16:28:46
【问题描述】:

我正在开发一个 React 应用程序,其中我在渲染函数中使用带有硬编码图像路径的 img 标签,如下所示

import '../css/styles.scss';
import React from 'react';
import ReactDom from 'react-dom';
import axios from 'axios';
import { List } from './list';

class App extends React.Component {

constructor(props) {
    super(props);
}


render() {
        return (
            <div className="container">
               < img src="images/logo.png" alt=""/> 
         );
    }
}

const root = document.getElementById('app-container');

ReactDom.render(<App />, root);

当我使用 webpack-dev-server 运行应用程序时,应用程序运行良好,我可以看到图像或网页。但是,当我使用 webpack 命令运行应用程序时,它会生成构建文件夹,并且当我运行应用程序时;我在网页中看不到图像。 我的 webpack.config.js 是:

const webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { resolve } = require('path');

module.exports = {
  devtool: 'cheap-module-eval-source-map',
  entry: [
    resolve(__dirname, 'src', 'js/app.js'),
  ],
  output: {
    filename: '[name].[hash].js',
    path: resolve(__dirname, 'build')
  },
  module: {
    rules: [
      {
        test: /\.jsx?$/,
        exclude: /node_modules/,
        loader: 'babel-loader',
        query: {
          presets: ['es2015', 'react']
        }
      },
      {
        test: /\.s?css$/,
        use: [
          'style-loader',
          'css-loader?sourceMap&camelCase&importLoaders=1&localIdentName=[name]__[local]___[hash:base64:5]',
          'sass-loader?sourceMap'
        ]
      }
  },
  plugins: [
    new webpack.NamedModulesPlugin(),
    new HtmlWebpackPlugin({
      template: resolve(__dirname, 'src', 'index.html')
    })
  ]
}

我知道我们可以使用 webpack 中的 file-loader 在 build 文件夹中生成图像文件夹并使用 import image from "__path to image" 但是,有没有办法在上面的渲染功能中提供直接图像路径? 提前致谢

【问题讨论】:

    标签: javascript image reactjs webpack webpack-dev-server


    【解决方案1】:

    一种解决方案是使用 CopyWebpackPlugin。这会将您的图像从 src 文件夹复制到 build 文件夹。然后您的应用可以解析相对 url。

    var CopyWebpackPlugin = require('copy-webpack-plugin');
    ....
      plugins: [
        new CopyWebpackPlugin([
          { from: './src/images', to: 'images' },
        ]),
      ]
    

    【讨论】:

      【解决方案2】:

      一个解决方案是你必须安装 url-loader。这是命令 npm install --save-dev url-loader

      然后在您的规则部分的 webpack.config 文件中添加以下代码。

      {
            test: /\.(png|jpg)$/,
            loader: 'url-loader?limit=25000'
          },
      

      接下来在你的APP组件中导入你的图片。

      从“images/logo.png”导入徽标;

      并在img标签中传递logo。像这样

      import '../css/styles.scss';
      import React from 'react';
      import ReactDom from 'react-dom';
      import axios from 'axios';
      import { List } from './list';
      import logo from 'images/logo.png';
      
      class App extends React.Component {
      
      constructor(props) {
          super(props);
      }
      
      
      render() {
              return (
                  <div className="container">
                     < img src={logo} alt=""/> 
               );
          }
      }
      
      const root = document.getElementById('app-container');
      
      ReactDom.render(<App />, root);
      

      【讨论】:

      • 谢谢,我已经说过这是一种选择,但我想我们需要文件加载器而不是 url-loader ?
      猜你喜欢
      • 2020-12-17
      • 2017-08-11
      • 2021-12-31
      • 2019-12-29
      • 1970-01-01
      • 2014-09-26
      • 2016-11-27
      • 2016-11-07
      • 1970-01-01
      相关资源
      最近更新 更多