webpack的url-loader和file-loader的区别

file-loader

rules: [{
            test: /\.(jpg|png|gif)$/,
            use: [{
                loader: 'file-loader',
                options: {
                    name() {
                        return '[name].[ext]';
                    },
                    outputPath: 'images/'
                }
            }]
 }]

打包之后
打包之后的文件目录
使用file-loader打包之后会把对应规则的文件,复制一份到打包之后的文件夹,生成新的文件名,并传给项目的输入文件使用;

url-loader

const path = require('path');
module.exports = {
    mode: 'production',
    entry: './src/index.js',
    output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, 'dist')
    },
    module: {
        rules: [{
            test: /\.(jpg|png|gif)$/,
            use: [{
                loader: 'url-loader',
                options: {
                    name() {
                        return '[name].[ext]';
                    },
                    outputPath: 'images/'
                }
            }]
        }]
    }
}

使用url-loader打包之后
在这里插入图片描述
这里可以看到使用url-loader并没有把匹配到的文件复制一份到打包之后的文件夹中;
可是页面还是可以正常显示这些图片
在这里插入图片描述
打开浏览器的控制台可以发现,这里其实是将这些文件转化为base64
这样做的好处是减少这些文件的http请求;但是这样做又会带来新的问题,如果这个图片特比大,那么生成的js文件也会特别的大,那么就会增加加载js的时间;

最好的做法是options里面加一个limit

rules: [{
            test: /\.(jpg|png|gif)$/,
            use: [{
                loader: 'url-loader',
                options: {
                    name() {
                        return '[name].[ext]';
                    },
                    outputPath: 'images/',
                    limit: 2048,
                }
            }]
        }]

这样子当文件小于2048才会把图片转化为base64打包到输出的js文件中,大于2048的图片则会跟file-loader一样复制到打包后的文件夹中

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值