使用 Webpack 在 React 中加载图像

Posted

技术标签:

【中文标题】使用 Webpack 在 React 中加载图像【英文标题】:Loading images in React with Webpack 【发布时间】:2017-08-31 23:08:25 【问题描述】:

我无法在使用 Webpack 和 React 的简单应用中显示简单图像。

我已通读此文并尝试了几种不同的方法,但不断收到各种错误,或者有时最多没有错误,但也没有图像显示。

这是我的 React 组件:

import React from 'react';
import styles from '../css/main.css';

import Menu from './Menu';

const logo = require('./images/PIVX_Planet_1a_239x83.png');

export default class App extends React.Component 
  constructor(props) 
    super(props);
    this.state = test: 'foo';
  
  render() 
    return (
      <div>
        <div id='container'></div>

        <div className=styles.logo>
          <img src=logo/>
        </div>
        <div>
          <Menu/>
        </div>
      </div>
    );
  

这是我的 webpack 配置:

...
module: 
    loaders: [
      test: /\.jsx?$/,
      exclude: /node_modules/,
      loader: 'babel',
      query: 
        "presets": ["react", "es2015", "stage-0", "react-hmre"]
      
    , 
      test: /\.(jpg|png|svg)$/,
      loader: 'url-loader',
      options: 
        limit: 25000,
      ,
    , 
      test: /\.json?$/,
      loader: 'json'
    , 
      test: /\.css$/,
      loader: 'style!css?modules&localIdentName=[name]---[local]---[hash:base64:5]'
    ]
  
...

这样,在控制台中从 webpack 获取错误:

./app/components/App.js 中的错误 找不到模块:错误:无法解析 /Users/mac/_DEV/_LAB/PIVX/PIVX-Planet-2/app/components 中的“文件”或“目录”./images/PIVX_Planet_1a_239x83.png @ ./app/components/App.js 67:11-56

我也尝试过使用 babel-plugin-transform-react-jsx-img-import (https://www.npmjs.com/package/babel-plugin-transform-react-jsx-img-import)

然后只需使用:

<div className=styles.logo>
  <img src="./images/PIVX_Planet_1a_239x83.png"/>
</div>

在这种情况下,没有错误,但图像显示为损坏。

我尝试使用所有这些组合更改图像的相对路径。

目录结构:

应用程序 组件 App.js 图片 PIVX_Planet_1a_239x83.png index.html ...

有什么见解吗?

【问题讨论】:

【参考方案1】:

根据您的目录结构,您需要使用的路径是

const logo = require('../images/PIVX_Planet_1a_239x83.png');

因为图像在app 目录下,而不是在您试图获取image 位置的components

还要确保您的所有loaders 都已正确安装

【讨论】:

成功了!谢谢。不知道是怎么错过的(我试过了)。我还必须安装:npm install url-loader 我试过了。系统说我需要 15+ 声望才能这样做(我现在只有 10 个)。 (我还不能投票,但接受了)。谢谢【参考方案2】:

你也可以试试 let as:

let logo = require('../images/PIVX_Planet_1a_239x83.png');

总是尽可能地使用 let 来避免作用域怪物

【讨论】:

【参考方案3】:

我遇到的问题是使用

import logo from './images/PIVX_Planet_1a_239x83.png'

而不是

const logo = require('./images/PIVX_Planet_1a_239x83.png');

在带有定制 webpack 配置的 typescript react 应用程序中。

【讨论】:

【参考方案4】:

我已经尝试了你们建议的所有方法,但没有任何东西对我有用。当我将代码放入并“运行开发”时,它会出现一个错误占位符。我在 app.js 中使用它,并希望我的徽标作为主页的链接或只是显示出来,在这种情况下,我试图将它放在页面上。

import '../styles/globals.css'
import Link from 'next/link'
import bpdlogofull from '../public/bpdlogofull.png'


    `function MyApp( Component, pageProps ) 
      return (
        <div>
          <nav className="border-b p-6">
            <img src=bpdlogofull alt='logo'className='flex justify-end'/>
            <div className="flex mt-4">
              <Link href="/" className="home-button">

【讨论】:

正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于使用 Webpack 在 React 中加载图像的主要内容,如果未能解决你的问题,请参考以下文章

不需要在 CRA 中加载图像

如何在使用“react-frame-component”库创建的 IFrame 中加载 webpack 提供的 css?

如何在 webpack 中加载 sass 样式表中使用的图像?

在 React Native Image 组件中加载本地图像

如何使用 webpack 在 js 文件中加载 CDN 或外部供应商 javascript lib,而不是在 html 文件中

在 react native 0.60.3 和 Xcode 11 中加载本地图像