javascript - webpack 4 给出背景 : url([object Module]) as bg image

标签 javascript webpack webpack-4 svg-sprite

我在设置 web-pack 4 和 svg-sprite-loader 以将 svg 图标呈现为背景图像时遇到问题。我正在按照 svg-sprite-loader ( https://github.com/kisenka/svg-sprite-loader/tree/master/examples/extract-mode ) 官方文档中的这些说明进行操作。

我已经成功地在我的 dist 文件夹中创建了 sprite.svg 文件,并将其用作我在 html 中使用标签的引用。但是,我还尝试使用我的 src/images/icons 文件夹中的 svg 图标作为背景图像,如下所示:

background: url('../images/icons/upload_icon.svg') 10% 50% no-repeat;

这样做时,webpack 编译正确,但在 dist css 文件中创建:

background: url([object Module]) 10% 50% no-repeat;

任何帮助都会很棒。

这是我的 webpack 配置文件:

const path = require("path");
const webpack = require("webpack");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const CleanWebpackPlugin = require("clean-webpack-plugin");
const SpriteLoaderPlugin = require("svg-sprite-loader/plugin");

module.exports = {
  mode: "development",
  devtool: "source-map",
  output: {
    filename: "bundle.js",
    path: path.resolve(__dirname, "dist")
  },
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: {
          loader: "babel-loader",
          options: {
            sourceMap: true
          }
        }
      },
      {
        // scss configuration
        test: /\.scss$/,
        use: [
          MiniCssExtractPlugin.loader,
          {
            loader: "css-loader"
          },
          {
            loader: "postcss-loader"
          },
          {
            loader: "sass-loader",
            options: {
              sourceMap: true
            }
          }
        ]
      },
      {
        // html configuration
        test: /\.html$/,
        use: {
          loader: "html-loader"
        }
      },
      {
        // images configuration
        test: /\.(jpg|jpeg|gif|png|woff|woff2)$/,
        use: [
          {
            loader: "file-loader",
            options: {
              name: "[path][name].[ext]"
            }
          }
        ]
      },
      {
        test: /\.svg$/,
        use: [
          {
            loader: "svg-sprite-loader",
            options: {
              extract: true,
              spriteFilename: "sprite.svg"
            }
          }
        ]
      }
    ]
  },
  plugins: [
    // all plugins used for compiling by webpack
    new CleanWebpackPlugin(),
    new HtmlWebpackPlugin({
      title: "Style Guide",
      template: path.resolve(__dirname, "src", "index.html")
    }),
    new MiniCssExtractPlugin({
      filename: "app.css"
    }),
    new SpriteLoaderPlugin()
  ]
};

最佳答案

在文件加载器选项中添加 esModule: false 对我有用。

{
    test: /\.(jpg|png|gif|svg)$/,
    use: {
        loader: 'file-loader',
        options: {
            name: "[name].[ext]",
            outputPath: "img",
            esModule: false
    }
},

关于javascript - webpack 4 给出背景 : url([object Module]) as bg image,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57671995/

相关文章:

javascript - 图像转到随机位置 : Trying to loop

javascript - ignoreWarnings 对 CRACO 和 webpack 5 没有影响

javascript - 光滑 slider 中的断点有什么用?

javascript - ES6 模块与 Webpack 之间的变量交换

javascript - Webpack 在 bundle.js 中包含未使用的库

javascript - 如何使用 webpack4 正确拆分常见依赖项

webpack - 如何在 Webpack 4 中使用 ES6 导入/导出?

javascript - 旧网站上的 Gulp 到 Webpack 迁移 - 从非 npm 依赖项生成 vendor

javascript - 使用 Polymer dom-if 的选择器放置不正确

javascript - Chrome 重新排序对象键(如果是数字)是正常/预期的吗