webpack - scss 无法解析背景图像 url

CCC*_*CCC 6 javascript sass urlloader reactjs webpack-5

在我的 scss 文件中,我使用background-image: url("../../../assets/images/home/banner-mobile.png");

应用程序运行成功,但没有显示背景图片:

背景图片 URL 未解析。 在此输入图像描述

webpack/webpack.base.js

const webpack = require("webpack");
const path = require("path");

const utils = require("./utils");

const HtmlWebpackPlugin = require("html-webpack-plugin");

module.exports = {
  entry: "./src/index.jsx",
  resolve: {
    alias: {
      "@": utils.resolve("src")
    },
    extensions: ["*", ".js", ".jsx"],
    fallback: {...},
  },
  module: {
    rules: [
      {
        test: /\.(js|jsx)$/,
        exclude: /node_modules/,
        use: {
          loader: "babel-loader",
        },
      },
      {
        test: /\.(sa|sc|c)ss$/,
        use: [
          {
            loader: "style-loader",
          },
          {
            loader: "css-loader",
          },
          {
            loader: "sass-loader"
          },
          {
            loader: "sass-resources-loader",
            options: {
              resources: ["./src/assets/scss/main.scss"],
            },
          },
        ],
      },
      {
        test: /\.(png|jpg|gif)$/i,
        use: [
          {
            loader: "url-loader",
            options: {
              limit: 8192
            },
          },
        ],
      }
    ],
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: "public/index.html",
      filename: "index.html",
      inject: true,
    })
  ],
};
Run Code Online (Sandbox Code Playgroud)

webpack/webpack.dev.js

const { merge } = require("webpack-merge");
const base = require("./webpack.base");

const Dotenv = require("dotenv-webpack");

module.exports = merge(base, {
  mode: "development",
  devtool: "inline-source-map",
  output: {
    publicPath: '/',
  },
  devServer: {
    port: 3000,
    static: true,
    static: 'dist'
  },
  plugins: [new Dotenv({ path: "./.env.development" })],
});
Run Code Online (Sandbox Code Playgroud)

更新 1
当我在 Web Inspector > 来源中查看 png 时: 在此输入图像描述

当我在浏览器中打开图像及其 URL 时: 在此输入图像描述

更新 2:
当我通过 VSCode 构建并查看图像时,它显示如下: 在此输入图像描述

不确定以下文件是否相关

webpack/Util.js

const path = require('path')

module.exports = {
  resolve: function(dir) {
    return path.join(__dirname, '..', dir)
  }
}
Run Code Online (Sandbox Code Playgroud)

Phi*_*hil 4

由于您使用的是 Webpack 5,我建议使用资产模块而不是已弃用的加载器

module: {
  rules: [
    // ...
    {
      test: /\.(png|jpg|gif)$/i,
      type: "asset",
      parser: {
        dataUrlCondition: {
          maxSize: 8192
        }
      }
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我怀疑您遇到了文档中所述的资源处理重复问题......

当在 webpack 5 中使用旧的资源加载器(即file-loader/ url-loader/ raw-loader)和资源模块时,您可能希望停止资源模块再次处理您的资源,因为这会导致资源重复。这可以通过将资产的模块类型设置为 来完成'javascript/auto'