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

反应生产构建,资产未加载

  •  0
  • Mevia  · 技术社区  · 6 年前

    我遇到了一个恼人的问题,当我在开发环境中运行我的react应用程序时,一切正常,但当我尝试构建到生产环境时,所有的链接都是错误的。

    假设这棵树:

    • 主目录

        • svg格式/
          • 一些img.svg
      • src公司/
        • 组件/
          • 一些组件.jsx
        • 应用程序.js
        • 索引.js

    现在在 some_component.jsx 我是这样引用svg文件的:

    src="/public/svg/some_img.svg"
    

    但是,在构建到生产后,此路径未被触及,因此无法再访问文件,因为我需要将其更改为:

    src="svg/some_img.svg"
    

    我在网页包配置文件中玩,我想也许通过设置:

    publicPath: "/"
    

    publicPath: "/public/"
    

    将解决问题,但它所做的唯一一件事是在应用程序启动期间出错:

    CANNOT GET/
    

    我的网页包配置:

    const HtmlWebPackPlugin = require("html-webpack-plugin");
    
    const htmlPlugin = new HtmlWebPackPlugin({
      template: "./public/index.html",
      filename: "./index.html"
    });
    
    module.exports = {
      output: {
        filename: "main.[hash:8].js",
        publicPath: "/"
      },
      module: {
        rules: [
          {
            test: /\.jsx$/,
            exclude: /node_modules/,
            loader: "babel-loader?presets[]=react"
          },
          {
            test: /\.js$/,
            exclude: /node_modules/,
            use: {
              loader: "babel-loader"
            }
          },
          {
            test: /\.(sass|scss)$/,
            use: ["style-loader", "css-loader", "sass-loader", "postcss-loader"]
          },
          {
            test: /\.svg$/,
            loader: "svg-sprite-loader"
          }
        ]
      },
      plugins: [htmlPlugin],
      devServer: {
        historyApiFallback: {
          rewrites: [{ from: /^\/$/, to: "/index.html" }]
        }
      },
      resolve: {
        extensions: [".js", ".jsx", ".json"]
      }
    };
    

    如何解决这个问题,使开发和生产路径都是统一的?

    2 回复  |  直到 6 年前
        1
  •  2
  •   twils0    6 年前

    导入svg,然后引用导入的变量如何:

    import someImg from "../../public/svg/some_img.svg"
    
    src={someImg}
    
        2
  •  0
  •   Mevia    6 年前

    这是解决问题所需的配置,用于指定路径:

    module: {
        ...
        rules: [
            {
                test: /\.(png|jpg|gif|svg|ico)$/,
                loader: 'file-loader',
                query:{
                    outputPath: './img/',
                    name: '[name].[ext]?[hash]'
                }
            }
            ...
        ]
    }