博主信息
博文 10
粉丝 0
评论 1
访问量 22452
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
webpack系列(3)--loader使用
疯狂电脑10086的博客
原创
1178人浏览过

loader

什么是loader

是一个打包方案,告诉webpack某个类型的文件该如何打包

语法

在配置文件中,添加:

  1. ...省略代码
  2. module:{
  3. rules:[
  4. { ...loader使用 }
  5. ]
  6. }

打包图片

file-loader

  • 安装 npm i file-loader -D

在入口文件中添加:

  1. import _jpg from './1.jpg'
  2. window.onload = function(){
  3. const img = document.createElement('img')
  4. img.src = _jpg
  5. document.body.appendChild(img)
  6. }
  1. 默认配置打包
  1. {test:/\.(jpg|png|git)$/,use:'file-loader'}
  1. 指定图片名称
  1. {
  2. test:/\.(jpg|png|gif)$/i,
  3. use:[{
  4. loader:'file-loader',
  5. options:{
  6. name:'[name].[hash].[ext]'
  7. }
  8. }]
  9. }
  1. 指定图片的输出路径
  1. {
  2. test:/\.(jpg|png|gif)$/i,
  3. use:[{
  4. loader:'file-loader',
  5. options:{
  6. name:'[name].[hash:10].[ext]', // [hash:10]10位hash
  7. outputPath:'imgs/'
  8. }
  9. }]
  10. }

url-loader

  • 安装npm i url-loader -D

需要注意的是,url-loader需要配合file-loader使用,所以两个loader都需要安装

  • 对图片使用url-loader
  1. {
  2. test:/\.(jpg|png|gif)$/,
  3. use:{
  4. loader:'url-loader',
  5. options:{
  6. name:'[name].[hash:10].[ext]',
  7. outputPath:'imgs/',
  8. }
  9. }
  10. }

在执行完打包命令后,我们发现,并没有将该图片打包到我们指定的文件夹中,但是页面上确可以正确的显示,这是为什么呢?

通过查看图片的src地址,发现,显示的并不是路径,而是base64,因为url-loader会默认将文件转换为base64编码,以减少http请求的次数,但是这么使用不对;因为如果文件很大,那么转换出来的base64编码也会很大,这个编码是在编译后的js入口文件中,所以会造成js文件体积增大,页面空白时间增多,所以,我们需要按需配置,将一定大小的文件转换为base64。

  • 按需配置文件大小
  1. options:{
  2. name:'[name].[hash:10].[ext]',
  3. outputPath:'imgs/',
  4. limit:1024*4
  5. }

以上配置的含义是:文件大于4kb的,均打包的指定的文件夹下,小于4kb的,直接转化为base64。

处理css

  • 安装style-loadercss-loader

    1. npm i style-loader css-loader -D
  • 添加loader处理,继续在module的rules中

  1. {
  2. test:/\.css$/i,
  3. use:['style-loader','css-loader']
  4. }

因为打包css文件,需要使用两个loader,所以在use中,不能使用对象的形式,而是数组

另外,需要注意的是,style-loader和css-loader的书写顺序问题,不能乱写

  • 关于style-loadercss-loader

    • css-loader帮助我们分析css各个文件之间的关系,并将它们合并成一个
    • style-loader将合并好的css文件挂载到页面的head部分

处理less

  • 安装lesss-loaderless
  1. npm i less-loader less -D
  • 配置loader
  1. {
  2. test:/\.less$/i,
  3. use:['style-loader','css-loader','less-loader']
  4. }

添加css私有前缀

  • 安装postcss-loaderautoprefixer
  1. npm i postcss-loader autoprefixer -D
  • 修改less的配置
  1. {
  2. test:/\.less$/i,
  3. use:['style-loader','css-loader','postcss-loader','less-loader']
  4. }
  • 添加postcss.config.js
  1. module.exports = {
  2. plugins:[
  3. require('autoprefixer')
  4. ]
  5. }

我们打包后发现,并没有起作用,其实是因为部分css样式,在新版的浏览器中已经取消了前缀,使用npx autoprefixer --info可查看哪些属性需要使用前缀。

  • 创建.browserslistrc文件,添加如下内容:
  1. last 3 version
  2. >0.2%

重新打包即可看到效果。

打包其他文件

webpack对于文件的处理,其实就是把文件从一个地方,复制一份移动到另外的地方

以字体文件为例:

  • 添加file-loader即可:
  1. {
  2. test:/\.(eot|svg|ttf|woff|woff2)$/i,
  3. loader:'file-loader',
  4. options:{
  5. name:'[hash:10].[ext]',
  6. outputPath:'fonts'
  7. }
  8. }

或者

  1. {
  2. test:/\.(eot|svg|ttf|woff|woff2)$/i,
  3. use:[{
  4. loader:'file-loader',
  5. options:{
  6. name:'[hash:10].[ext]',
  7. outputPath:'fonts'
  8. }
  9. }],
  10. }
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学