webpack loader file-loader url-loader

1、什么是loader

webapck的本质是一个模块打包工具, 所以webpack默认只能处理JS文件,不能处理其他文件,用于将其它类型文件转换为webpack能够识别处理模块的工具我们就称之为loader。

2、如何使用loader

① 通过npm安装对应的loader。
② 按照loader作者的要求在webpack进行相关配置。
③ 使用配置好的loader。

3、webpack-file-loader(打包css,js中的图片、字体图标)

(1)fileloader使用

fileloader可以打包图片文件。

https://www.webpackjs.com/loaders/file-loader/

① 安装file-loader

npm install --save-dev file-loader

② 在webpack.config.js中配置file-loader

  • 打包图片
module.exports={
    module:{  //告诉webpack如何处理webpack不能够识别的文件
        rules:[
            {
                test:/\.(png|jpg|gif)$/,
                use:[
                    {
                        loader:'file-loader',
                        options:{}
                    }
                ]
            }
        ]
    }
}
  • 打包字体图标
{
      test: /\.(eot|json|svg|ttf|woff|woff2)$/,
      use: [
             {
               loader: 'file-loader',
               options: {
                   // 指定打包后文件名称
                   name: '[name].[ext]',
                   // 指定打包后文件存放目录
                   outputPath: 'font/',
                }
      ]
}

(2)fileloader的其他配置

① 默认情况下fileloader生成的图片名就是文件内容的 MD5 哈希值
可以新增配置:name: "[name].[ext]"
② 默认情况下fileloader会将生成的图片放到dist根目录下面
如果放到指定目录下面, 那么可以新增配置:outputPath: "images/"
③ 如果要将图片托管到其它服务器, 需配置 publicPath: "托管服务器地址"
③ 遇到的坑:file-loader打包图片文件时路径错误输出为[object-module]
在webpack的file-loader配置项里,设置esModule为false。

module: {
        rules: [
          {
            test: /\.(png|jpg|gif)$/,
            use: [
              {
                loader: 'file-loader',
                options: {
                    esModule: false
                }
              }
            ]
          }
        ]
   }

3.webpack-url-loader(打包css,js中的图片)

(1)urlloader

url-loader 功能类似于 file-loader,但是在文件大小(单位 byte)低于指定的限制时,可以返回一个 DataURL。

(2)urlloader使用

https://www.webpackjs.com/loaders/url-loader/

① 安装urlloader

npm install --save-dev url-loader

② 配置urlloader
/*
module: 告诉webpack如何处理webpack不能够识别的文件
* */

 module: {
        rules: [
            {
                test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
                use: [
                    {
                        loader: 'url-loader',
                        options: {
                            limit: 1024 * 100,
                            // 指定打包后文件名称
                            name: '[name].[ext]',
                            // 指定打包后文件存放目录
                            outputPath: 'images/',
                        }
                    }
                ]
            },
             {
                test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
                loader: 'url-loader',
                options: {
                  limit: 10000,
                  name: '[name].[ext]',
                },
             },
             {
                test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
                loader: 'url-loader',
                options: {
                  limit: 10000,
                  name: utils.assetsPath('fonts/[name].[hash:7].[ext]'),
                 },
             },
        ]
    }

limit: 指定图片限制的大小
如果被打包的图片超过了限制的大小, 就会将图片保存为一个文件;
如果被打包的图片没有超过限制的大小, 就会将图片转换成base64的字符串。

(3)优势

图片比较小的时候直接转换成base64字符串图片, 减少请求次数,
图片比较大的时候由于生成的base64字符串图片也比较大, 就保持原有的图片。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值