# Webpack打包图片资源

npm i file-loader url-loader -D  

// file-loader 解决CSS等文件中的引入图片路径问题
// url-loader 当图片小于 limit 的时候会把图片BASE64编码,大于limit参数的时候还是使用file-loader 进行拷贝
// 目录结构
src
    --css
        index.scss
    --imgs
        webpack.png
    index.html
    index.js
webpack.config.js
const { resolve } = require("path");
const HtmlWebpackPlugin = require('html-webpack-plugin')
const config = {
    mode: 'development',
    entry: './src/index.js',
    output: {
        filename: 'app.js',
        path: resolve(__dirname, 'dist')
    },
    module: {
        rules: [{
            test: /\.scss$/,
            use: [{
                loader: "style-loader"
            }, {
                loader: "css-loader"
            }, {
                loader: "sass-loader"
            }]
        }, {
            // 处理图片资源
            test: /\.(jpg|png|bmp|gif|svg)$/,
            // 下载url-loader,file-loader
            loader: 'url-loader',
            options: {
                // 图片大小小于8kb ,就会被base64处理
                // 优点: 减少请求数量(减轻服务器压力);
                // 缺点:图片体积会变大(文件请求速度更慢)
                limit: 8 * 1024,
                // 默认使用es6模块化解析,html-loader引入的图片是commonjs
                // 解析会出现[Object Moudle]
                // 解决方式:关闭url-loader的es6模块化。使用commonjs解析
                esMoudle: false,
                // 给图片进行重命名
                // [hash:10]取图片的hash的前10位
                // [ext]取文件原来扩展名
                name:'[hash:10].[ext]',
                outputPath: 'imgs' // 输出到imgs目录 
            }
        }, {
            test: /\.html$/,
            // 处理html文件的img图片(负责引入img 从而能被url-loader处理)
            // 下载 html-loader
            loader: 'html-loader'
        }]
    },
    plugins: [
        new HtmlWebpackPlugin({
            template: './src/index.html'
        })
    ]
}

module.exports = config;
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>webpack打包图片资源</title>
</head>
<body>
    <div class="packageimage"></div>
    <img src="./imgs/webpack.png">
</body>
</html>

# js中引入图片

let logo=require('./images/logo.png');
let img=new Image();
img.src=logo;
document.body.appendChild(img);

# css中引入图片

.logo{
    width:355px;
    height:133px;
    background-image: url(./images/logo.png);
    background-size: cover;
}
Last Updated: 12/4/2022, 12:29:31 PM