webpack---打包图片资源

一:图片分类:

1 css background-image: url(\'xxx.png\');

2 html <img src="xxx.png">

二:打包css 图片

1 下载 url-loader file-loader

npm i url-loader file-loader -D

三:打包html通过img使用图片

1 下载 html-loader

const { resolve } = require(\'path\');
const HtmlWebpackPlugin = require(\'html-webpack-plugin\');

module.exports = {
    entry: \'./src/index.js\',
    output: {
    filename: \'built.js\',
    path: resolve(__dirname, \'build\')
    },
    module: {
    rules: [
        {
        test: /\.less$/,
        // 要使用多个loader处理用use
        use: [\'style-loader\', \'css-loader\', \'less-loader\']
        },
        {
        // 问题:默认处理不了html中img图片
        // 处理图片资源
        test: /\.(jpg|png|gif)$/,
        // 使用一个loader
        // 下载 url-loader file-loader
        loader: \'url-loader\',
        options: {
            // 图片大小小于8kb,就会被base64处理
            // 优点: 减少请求数量(减轻服务器压力)
            // 缺点:图片体积会更大(文件请求速度更慢)
            limit: 8 * 1024,
            // 问题:因为url-loader默认使用es6模块化解析,而html-loader引入图片是commonjs
            // 解析时会出问题:[object Module]
            // 解决:关闭url-loader的es6模块化,使用commonjs解析
            esModule: false,
            // 给图片进行重命名
            // [hash:10]取图片的hash的前10位
            // [ext]取文件原来扩展名
            name: \'[hash:10].[ext]\'
        }
        },
        {
        test: /\.html$/,
        // 处理html文件的img图片(负责引入img,从而能被url-loader进行处理)
        loader: \'html-loader\'
        }
    ]
    },
    plugins: [
    new HtmlWebpackPlugin({
        template: \'./src/index.html\'
    })
    ],
    mode: \'development\'
};

  注意:

  • 虽然 没有配置file-loader,是因为url-loader 包含file-loader,当图片资源小于limit配置时,会以url-loader打包经过base64打包图片,优点减少http请求,大于limit配置时,会以file-loader打包图片资源