代码之家  ›  专栏  ›  技术社区  ›  ThunD3eR

如何使用webpack+react呈现图像?

  •  2
  • ThunD3eR  · 技术社区  · 7 年前

    我是相当新的反应和网页包,我得到这个奇怪的问题,我不明白。

    enter image description here

    当我检查图像上面是我所看到的,显然没有显示我的图像。我用的是文件加载器。

    我的结构:

    enter image description here

    网页包:

    const path = require("path");
    const webpack = require("webpack");
    
    const bundlePath = path.resolve(__dirname, "dist/");
    
    module.exports = {
      entry: "./src/index.js",
      module: {
        rules: [
          {
            test: /\.(js|jsx)$/,
            exclude: /(node_modules|bower_components)/,
            loader: "babel-loader",
            options: { presets: ["env"], plugins: ["transform-class-properties"] },
          },
          {
            test: /\.js$/,
            exclude: /node_modules/,
            use: ["eslint-loader"],
          },
          {
            test: /\.css$/,
            use: ["style-loader", "css-loader"],
          },
    
          {
            test: /\.(png|jpg|gif)$/,
            use: [
              {
                loader: "file-loader",
                options: {},
              },
            ],
          },
        ],
      },
      resolve: { extensions: ["*", ".js", ".jsx"] },
      output: {
        publicPath: bundlePath,
        filename: "bundle.js",
      },
      devServer: {
        contentBase: path.join(__dirname, "public"),
        port: 8080,
        publicPath: "http://localhost:8080/dist",
        historyApiFallback: true,
      },
      plugins: [new webpack.HotModuleReplacementPlugin()],
    };
    

    我错过了什么?

    编辑:

    像这样导入图像:

    import headerImage from "../../../../public/images/MyImage.jpg"
    

    渲染如下:

    class Header extends Component {
        linkClick = event => {
          if (this.props.properties.movment.position.x > 0) event.preventDefault();
        };
        render() {
          return (
    
                  <Navbar inverse fluid >
    
                  <Navbar.Header>
                    <Navbar.Brand>
                   <Image src={headerImage}/>
                    </Navbar.Brand>
                    <Navbar.Toggle />
                  </Navbar.Header>
    
                  <Navbar.Collapse>
                    <Nav pullRight>
                    <HeaderLinks linkClicked={this.linkClick} />
                    </Nav>
                  </Navbar.Collapse>
    
                  </Navbar>
          );
        }
    }
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   Rohit Nethi    7 年前
    var requireImages = require.context('../public/images', true, /\.(jpg|png|gif|svg)$/);
    

    你可以把上面的代码插入你的索引.js文件直接引用应用程序中任何位置的图像。

    你也可以继续使用 <Image src="./public/images/MyImage.jpg" />

    编辑:请检查路径并确保它指向dist>public>images文件夹中的图像

        2
  •  0
  •   ThunD3eR    7 年前

    我还通过链接将网页包confic改为@olivierboiss的assuggester

    test: /\.(jpe?g|png|gif|svg)$/i,
    loader: "file-loader?name=/public/images/[name].[ext]",
    options: {
      limit: 100000,
    },
    

    以及以下内容:

      output: {
        path: path.resolve(__dirname, "dist"),
        publicPath: "/dist/",
        filename: "bundle.js",
      },