реагировать на производство, активы не загружаются - PullRequest
0 голосов
/ 18 сентября 2018

У меня возникла досадная проблема, когда я запускаю свое реагирующее приложение в среде разработки, все работает нормально, но когда я пытаюсь перейти к производству, все ссылки неверны.

предположим, что это дерево:

  • main_directory

    • общественности /
      • SVG /
        • some_img.svg
    • SRC /
      • компоненты /
        • some_component.jsx
      • App.js
      • index.js

Теперь в some_component.jsx я ссылаюсь на SVG-файл следующим образом:

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

однако после сборки в производство этот путь остается нетронутым и, следовательно, больше не может получить доступ к файлу, так как там мне нужно было бы изменить его на:

src="svg/some_img.svg"

Я играл в конфигурационном файле webpack, я подумал, что, возможно, установив:

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 ]

0 голосов
/ 19 сентября 2018

это решение вопроса, необходим конфиг для указания пути:

module: {
    ...
    rules: [
        {
            test: /\.(png|jpg|gif|svg|ico)$/,
            loader: 'file-loader',
            query:{
                outputPath: './img/',
                name: '[name].[ext]?[hash]'
            }
        }
        ...
    ]
}
0 голосов
/ 18 сентября 2018

Как насчет импорта svg и затем ссылки на импортированную переменную:

import someImg from "../../public/svg/some_img.svg"

src={someImg}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...