webpack5打包图片资源

场景:

在做webpack5打包图片资源时,发现图片无法显示,各种报错,特此记录一下。

插件版本:

  • “webpack”: “^5.52.1”,
  • “webpack-cli”: “^4.8.0”

1.针对 css 中引入的资源

方法一:

使用 url-loader 处理图片资源,添加 type: ‘javascript/auto’ 使得webpack5中能够支持旧版语法。

需要下载插件:

npm i url-loader file-loader -D

webpack.config.js 中配置:

{
    // 处理图片资源
    test: /\.(jpg|png|gif)$/,
    // 下载 url-loader file-loader
    loader: 'url-loader',
    options: {
        publicPath: './img', // 相对打包后的index.html的图片位置
        outputPath: 'img/', // 输出到build的目录img下
        // 图片小于 10kb,会被 base64处理
        // 优点:减少请求数量(减轻服务器压力)
        // 缺点:图片体积会更大(文件请求速度更慢)
        limit: 10 * 1024,
        // 问题:url-loader默认使用es6模块化解析,而html-loader引入图片是commonjs,解析时会出现问题:[object Module]
        // 解决:关闭url-loader的es6模块化,使用commonjs解析
        esModule: false,
        // 给图片重命名
        // [hash:6] 取图片的hash的前6位
        // [ext] 取文件原来的扩展名
        name: '[name].[hash:6][ext]'
    },
    type: 'javascript/auto', //在webpack5中使用旧版功能
},

方法二:

使用webpack5内置的 assets module 处理(url-loader已废弃)

{
    // 处理图片资源
    test: /\.(jpg|png|gif)$/,
    // webpack5中使用assets-module(url-loader已废弃)
    type: 'asset',
    parser: {
        dataUrlCondition: {
            maxSize: 10 * 1024
        }
    },
    generator: {
        filename: 'img/[name].[hash:6][ext]',
        publicPath: './'
    }
},

2.针对 html 中 img 标签图片

将 html-loader 更换为 html-withimg-loader

下载插件:

npm i html-withimg-loader -D

webpack.config.js 中配置:

{
    test: /\.html$/,
    // 处理html文件的img图片(负责引入img,从而能被url-loader处理)
    // webpack5中使用 html-withimg-loader代替
    // loader: 'html-loader'
    loader: 'html-withimg-loader'
}

打包后文件:
在这里插入图片描述

图片名:文件名 + hash值(前6位) + 后缀,小于10kb的图片会转成base64位编码


wepack官网:https://webpack.docschina.org/

  • 8
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qsya

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值