webpack打包html中img标签引入的图片遇到的问题

解决webpack“Automatic publicPath is not supported in this browser”问题

一、起因

最近在学习webpack之时遇到了这个问题,问题是出现在学习打包html中的img标签之时,根据教程打,教程的loader配置是这样的

            {
                test:/\.(jpg|png|gif)$/,
                //多个loader时,使用use,一个时可以直接使用loader
                //下载两个包url-loader  file-loader,前者依赖于后者
                loader:'url-loader',
                options:{
                    //图片大小小于8kb,就会被base64处理
                    //优点:减少请求数量(减轻服务器压力)
                    //缺点:图片体积更大(文件请求速度更慢)
                    limit: 8 * 1024,
                }
            },
            {
                test:/\.html$/,
                //处理html中的图片问题,负责引入,从而可以被url-loader处理
                loader:'html-loader'
                
            }

在这种配置下,他的打包运行情况是html中的img的src路径会被替换成module object,这是因为url-loader是使用es6的模块化进行处理的,而html-loader是使用commonjs进行处理的,解决这个问题只需要在options中加入esModule:false即可,教程如是说。

但自己在运行的时候发现无论加不加esModule:false都是报错的,报错是Automatic publicPath is not supported in this browser,

截图如下

报错截图

查找网上解决方法,发现只有最近几天的博客有这种问题。(猜想可能是版本问题,我使用的5.1.x版本,教程是4.3.x)

二、解决方法

网上说的解决方法都是在output中添加publicPath:'./'但是没说原因。

经过测试,确实可行。该方式会在输出的静态资源的路径前自动加上./这时候资源引入就成功了,也不报错。

首先说明我使用的是5.1.x版本,后续版本可能会变化。

我的目录结构:

目录结构

对于publicPath的理解,我是参考此博客publicPath的理解,加上自己的测试总结出:

publicPath会自动在输出的静态资源的路径前加上我们写的值,而加上publicPath:'./'的原因就是让我们html中img标签的路径正确,因为输出的图片是在build文件夹中,但不会创建新的文件夹,我这个版本可能是需要自己加上这个publicPath,而我所看的教程是不用的,因此报错了。如果我们将输出的资源放在build中的其他文件夹,则我们的./也要改成对应路径。即输出的文件路径与publicPath路径一致。上面博客的总结是:因为一致所以可以不用写publicPath但是在我这个版本中报错了。所以加上即可。

如有错误欢迎指正!

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值