【问题标题】:Webpack css-loader generate wrong imageWebpack css-loader 生成错误的图像
【发布时间】:2021-10-17 21:24:27
【问题描述】:

我通过 miniCssExtract 和 sass-loader 将 svg 粘贴到 css 加载器(当然我在 main.js 中导入它),当我在 sass 文件中使用 url 函数时,我生成了 2 个文件(1 个普通 svg)和第二个是字符串"export default __webpack_public_path__ + "3a93a0304bac6c9d74a5f25388ed6773.svg";",浏览器说无法读取。

我浪费了 3 个小时的研究时间,我已经完成了,帮帮我!

webpack.config.js:

const path = require('path')
const {CleanWebpackPlugin} = require('clean-webpack-plugin')
const HTMLWebpackPlugin = require('html-webpack-plugin')
const MiniCssExtractPlugin = require("mini-css-extract-plugin")


module.exports = {
    context: path.resolve(__dirname,"src",),
    mode: "development",
    entry: {
        main: "./main.js"
    },
    output: {
        filename: "[filename][contenthash].js",
        path: path.resolve(__dirname,"dist"),
        
    },
    
    
    plugins: [
        new CleanWebpackPlugin(),
        new HTMLWebpackPlugin({
            template:'index.html',
            inject:"body",
        }),
        new MiniCssExtractPlugin(),
    ],
    module: {
        rules: [

            {
                test: /\.(png|jpe?g|gif|svg)$/i,
                type: 'asset/resource',
                use: {
                    loader: 'file-loader',
                  }
                  
            },
        

            {
                test: /\.s(a|c)ss$/i,
                use:[MiniCssExtractPlugin.loader,"css-loader","sass-loader"],
                
            }
        ]
            
    }

}

main.js:

import "./styles.sass"
import BG from "./assets/images/BG.svg"

styles.sass:

// GENERAL START

*
    margin: 0 0
    padding: 0 0
    user-select: none

html,body
    width: 100%
    height: 100%
    overflow: hidden
    box-sizing: border-box

// GENERAL END

// HEAD START
.header__
    background-image: url(./assets/images/BG.svg)


.head__head
    display: flex  

// HEAD END

【问题讨论】:

  • 您需要提供更具体的详细信息,例如插入方式。没有您的任何文件内容,就不可能知道问题出在哪里。
  • CSS 通常需要从 CSS 本身到图像的路径。它不能使用相对路径,因为您可以在 HTML 或 Javascript 中使用它。
  • 现在我使用了 url 函数的绝对路径,并且仍然在浏览器的输出中我得到了这个背景图像: url(b16484aa3810e1bbb3cc.svg);(cant-read)

标签: javascript css webpack sass


【解决方案1】:

看起来问题出在文件加载器上。 css-loader 中有一个关于此问题的已解决问题 https://github.com/webpack-contrib/css-loader/issues/1358

尝试改用https://webpack.js.org/guides/asset-modules/

在您的情况下,删除“文件加载器”就足够了。

【讨论】:

  • 那么,我将删除文件加载器...以及如何使用 svg 和其他图像?
  • 像往常一样导入它并在配置中为 svg 设置一个“资产/内联”。详情请见webpack.js.org/guides/asset-modules
  • 感谢您节省了我的时间!
猜你喜欢
  • 2017-11-18
  • 2015-11-19
  • 1970-01-01
  • 2017-06-26
  • 2018-02-07
  • 2023-01-05
  • 2021-10-21
  • 2016-09-15
  • 2019-01-24
相关资源
最近更新 更多