不能在 webpack 中使用 <img> 标签

Posted

技术标签:

【中文标题】不能在 webpack 中使用 <img> 标签【英文标题】:Can't use <img> tags with webpack 【发布时间】:2021-11-19 23:59:46 【问题描述】:

最近,我一直在尝试通过 html 文件在我的 webpack 项目中使用图像。当我用它的实际路径调用图像时,它只会显示一个损坏的图像图标。我曾尝试使用&lt;img src="&lt;%= require() %&gt;"/&gt;,正如我在互联网上看到的那样,还使用import './assets/C.png'javascript 上导入它们,但似乎没有任何效果,只是显示那个烦人的图标。当您去检查并查看来源时,您会看到图像但实际上看不到照片:

但实际上,CSS样式表上调用的png文件是正确捆绑的:

谁能向我解释为什么会发生这种情况或如何解决它?谢谢,如果您需要更多文件,请告诉我,这是我的代码;

webpack.config.js

const CopyWebpackPlugin = require('copy-webpack-plugin')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const MiniCSSExtractPlugin = require('mini-css-extract-plugin')
const path = require('path')

module.exports = 
    entry: path.resolve(__dirname, '../src/script.js'),
    output:
    
        path: path.resolve(__dirname, "../dist"),
        filename: "bundle.[contenthash].js"
    ,
    devtool: 'source-map',
    plugins:
    [
        new CopyWebpackPlugin(
            patterns: [
                 from: path.resolve(__dirname, '../static') 
            ]
        ),
        new HtmlWebpackPlugin(
            template: path.resolve(__dirname, '../src/index.html'),
            minify: true
            
        ),
        new MiniCSSExtractPlugin()
    ],
    module:
    
        rules:
        [
            // HTML
            
                test: /\.(html)$/,
                use: ['html-loader']
            ,

            // JS
            
                test: /\.js$/,
                exclude: /node_modules/,
                use:
                [
                    'babel-loader'
                ]
            ,

            // CSS
            
                test: /\.css$/,
                use:
                [
                    MiniCSSExtractPlugin.loader,
                    'css-loader'
                ]
            ,

            // Images
            
                test: /\.(jpe?g|png|gif)$/i,
                loader: "file-loader"
            ,

            // Fonts
            
                test: /\.(ttf|eot|woff|woff2)$/,
                use:
                [
                    
                        loader: 'file-loader',
                        options:
                        
                            outputPath: 'assets/fonts/'
                        
                    
                ]
            
        ]
    


index.html

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    
    <title>My page</title>

    <script defer src="script1.js"></script>
    <script src="script2.js"></script>

    <link rel="stylesheet" href="style.css">
    <link rel="shortcut icon" href="./assets/C.png" type="image/x-icon">

</head>

<body>

        <div class="headerdiv">
            <a class="logo" href="/"><img class="logoimg" src="./assets/CREAT_extended_blue.png"></a>
            <nav>
                <ul class="nav__links">
            <li><a href="index.php" class="active">Página principal</a></li>
            <li><a href="vender.php">Vender un producto</a></li>
            <li><a href="#carrito">Carrito de la compra</a></li>
            <li><a href="micuenta.php">Mi cuenta</a></li>
            <li><a href="info.html">Información</a></li>
            </a></li>
                </ul>
            </nav>
            <a class="cta" href="#">Contact</a>
            <p class="menu cta">Buscar</p>
        </div>
        <div id="mobile__menu" class="overlay">
            <a class="close">&times;</a>
            <div class="overlay__content">
                <a href="index.php" class="active">Página principal</a>
                <a href="vender.php">Vender un producto</a>
                <a href="#carrito">Carrito de la compra</a>
                <a href="micuenta.php">Mi cuenta</a>
                <a href="info.html">Información</a>
            </div>
        </div>
        <script type="text/javascript" src="mobile.js"></script>

</script>

    <header data-aos="fade-up" class="cabecera-inicio" id="hero-image">
        <canvas class="webgl"></canvas>
        <script src="script.js"></script>
    </header>
    <div class="page-content">

    </div>
      <script src="https://unpkg.com/aos@next/dist/aos.js"></script>
  <script>
    AOS.init();
  </script>

</body>
<footer>


    <div class="textos-destacado" >
        </br>
        <h1 data-aos='fade-up'>
            <b> This is a title </b>
        </h1>
    </div>

    <div class="sponsor">

        
        <img data-aos='fade-left' src="./assets/hoja2.png"/>
            <div class="sponsor-producto">

            </div>
        <img data-aos='fade-right' src="./assets/hoja2.png"/>
    </div>
</footer>
</html>

我的项目分布

【问题讨论】:

【参考方案1】:

嗯,课程提供的文件有一个尚未修复的错误,因此我必须使用资产模块修复该错误。

【讨论】:

以上是关于不能在 webpack 中使用 <img> 标签的主要内容,如果未能解决你的问题,请参考以下文章

在这种情况下不能使用 v-img 吗?

无法在 React + Webpack 中传递相对 img src 路由

如何使用 webpack 将本地图像加载到 html 中的元标记

Vue.js img src 使用绝对路径(django+webpack)

Vue.js props img src 与 webpack 别名 (@) 绑定

webpack踩坑之路 ——图片的路径与打包