Webpack JS Template Strings для генерации встроенного стиля CSS для фонового изображения: url () - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть следующая строка шаблона в JS:

`<div class="card-img center-auto" alt="Image of ${data.title}" class="${data.imgClass}" style="background-image: url(images/${data.imageName}.JPG)"></div>`

Фоновое изображение - это встроенный стиль, имя пути к файлу которого загружается с data.imageName при запуске.

Загрузка изображенийв DEV, и если я открываю среду PROD, локально образы есть, но когда я поднимаю их на страницы Github, изображения становятся ошибкой 404. Я ждал, пока, как я знаю, иногда может потребоваться время для загрузки на страницы GitHub, но все равно ничего.

Папка с изображениями называется «Изображения» в том же корне, что и index.html

Как получить Webpack для загрузки этих изображений?Я пробовал file-loader, url-loader и либо я неправильно настроил, либо должен использовать что-то еще?Спасибо

Конфигурация Webpack DEV:

const path = require("path");

module.exports = {
  mode: "development",
  entry: {
    app: "./src/scripts/script.js"
  },
  devtool: "eval-source-map",
  devServer: {
    contentBase: "./dev"
  },
  output: {
    filename: "[name].bundle.js",
    path: path.resolve(__dirname, "dev")
  },
  module: {
    rules: [
      {
        test: /\.(png|jpg|gif)$/i,
        use: [
          {
            loader: "url-loader",
            options: {
              limit: 8192
            }
          }
        ]
      },
      {
        test: /\.(png|jpe?g|gif|svg)$/,
        use: [
          "file-loader",
          {
            loader: "image-webpack-loader",
            options: {
              mozjpeg: {
                progressive: true,
                quality: 65
              },
              // optipng.enabled: false will disable optipng
              optipng: {
                enabled: false
              },
              pngquant: {
                quality: "65-90",
                speed: 4
              },
              gifsicle: {
                interlaced: false
              }
            }
          }
        ]
      },
      {
        test: /\.css$/,
        use: ["style-loader", "css-loader"]
      }
    ]
  }
};

Конфигурация Webpack Prod:

const webpack = require("webpack");
const path = require("path");
const UglifyJSPlugin = require("uglifyjs-webpack-plugin");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const OptimizeCSSAssetsPlugin = require("optimize-css-assets-webpack-plugin");

module.exports = {
  mode: "production",
  entry: {
    app: "./src/scripts/script.js"
  },
  devtool: "source-map",
  plugins: [
    new UglifyJSPlugin({
      cache: true,
      sourceMap: true
    }),
    new OptimizeCSSAssetsPlugin({}),
    new webpack.DefinePlugin({
      "process.env.NODE_ENV": JSON.stringify("production")
    }),
    new MiniCssExtractPlugin({
      // Options similar to the same options in webpackOptions.output
      // both options are optional
      filename: "[name].css",
      chunkFilename: "[id].css"
    })
  ],
  output: {
    filename: "[name].bundle.js",
    path: path.resolve(__dirname, "docs")
  },
  module: {
    rules: [
      {
        test: /\.(html)$/,
        use: {
          loader: "html-loader",
          options: {
            attrs: [":data-src", "img:src"],
            minimize: true
          }
        }
      },
      {
        test: /\.css$/,
        use: [MiniCssExtractPlugin.loader, "css-loader"]
      },
      {
        test: /\.svg$/,
        loader: "svg-inline-loader"
      }
    ]
  }
};

1 Ответ

0 голосов
/ 04 декабря 2018

По какой-то причине выяснил, что GitHub запомнил .jpg для изображений, даже если я изменил его на .JPG и выдвинул изменения, я добавил изображения в Prod, которые были добавлены и переизданы, и это сработало.

...