如何在 React JS 应用程序中使用 webpack 在 img 标签中提供静态图像路径
How to serve static Image path in img tag with webpack in React JS application
我正在开发一个 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 中的文件加载器在构建文件夹中生成图像文件夹并使用 import image from "__path to image"
但是,有什么方法可以提供上面渲染功能中提到的直接图像路径吗?
提前致谢
一种解决方案是使用 CopyWebpackPlugin。这会将您的图像从 src 文件夹复制到 build 文件夹。然后您的应用程序可以解析相对 url。
var CopyWebpackPlugin = require('copy-webpack-plugin');
....
plugins: [
new CopyWebpackPlugin([
{ from: './src/images', to: 'images' },
]),
]
一个解决方案是你必须安装 url-loader.This 是命令
npm install --save-dev url-loader
然后在规则部分的 webpack.config 文件中添加以下代码。
{
test: /\.(png|jpg)$/,
loader: 'url-loader?limit=25000'
},
接下来将您的图像导入到您的 APP 组件中。
从 'images/logo.png' 导入徽标;
并在 img 中传递徽标 tag.Like this

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);
我正在开发一个 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 中的文件加载器在构建文件夹中生成图像文件夹并使用 import image from "__path to image"
但是,有什么方法可以提供上面渲染功能中提到的直接图像路径吗?
提前致谢
一种解决方案是使用 CopyWebpackPlugin。这会将您的图像从 src 文件夹复制到 build 文件夹。然后您的应用程序可以解析相对 url。
var CopyWebpackPlugin = require('copy-webpack-plugin');
....
plugins: [
new CopyWebpackPlugin([
{ from: './src/images', to: 'images' },
]),
]
一个解决方案是你必须安装 url-loader.This 是命令 npm install --save-dev url-loader
然后在规则部分的 webpack.config 文件中添加以下代码。
{
test: /\.(png|jpg)$/,
loader: 'url-loader?limit=25000'
},
接下来将您的图像导入到您的 APP 组件中。
从 'images/logo.png' 导入徽标;
并在 img 中传递徽标 tag.Like this
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);