Vue

webpack中的loader,webpack打包css、less、url文件等资源

05-21 10:11

loader概述

在实际开发过程中,webpack默认只能打包处理以.js结尾的文件(模块),其它非.js后缀结尾的模块,webpack处理不了,需要调用loader加载器才可以正常打包,否则会报错。

loader加载器的作用:协助webpack打包处理特定的文件模块,比如:

  • css-loader 可以打包处理.css相关的文件
  • less-loader 可以打包处理.less相关的文件
  • babel-loader 可以打包处理webpack无法处理的高级js语法


loader调用过程


打包处理css文件

安装css文件的loader

npm i style-loader css-loader -D

在webpack.config.js配置文件的 module->rules数组中,添加loader规则:

//所有第三方文件模块的匹配规则

module: {

//文件后缀名的匹配规则

rules: [

//test表示匹配的文件类型,use表示对应要调用的loader

{ test: /\.css$/, use: ['style-loader', 'css-loader'] }

]

}

注意:

1、use数组中指定的loader顺序是固定的

2、多个loader的调用顺序是:从后往前调用


打包处理less文件

安装less文件的loader

npm i style-loader css-loader less-loader less -D //less是less-loader的内置依赖项,不需要显式声明,less-loader内部会用到它

在webpack.config.js配置文件的 module->rules数组中,添加loader规则:

module: {

ules: [

{ test: /\.less$/, use: ['style-loader', 'css-loader', 'less-loader'] }

]

}


打包处理样式表中与url路径相关的文件(图片)

编写样式时,有些精灵图或小图片,也会用url方式指定,如果在样式表中引用了太多的小图片,会导致网页发起一些不必要的网络请求,如何优化?

把小图片转成base_64格式,减少一些不必要的网络请求,即可提高网页的加载性能。

但并不是所有图片都适合base_64,只有那些小图片才适合转成base_64,大图片直接发请求即可。

控制哪些图片转base_64,哪些图片不转base_64,需要用到url-loader参数项。

安装

npm i url-loader file-loader -D //file-loader是内置依赖项(用于处理不转base64的图片),只需安装即可,不需要显示声明和配置

在小于webopack5的版本中,通过在webpack.config.js配置文件的 module->rules数组中,添加loader规则即可直接使用url-loader:

module: {

rules: [

{

test: /\.jpg|jpeg|png|gif$/, //匹配图片文件

use: {

loader: 'url-loader', //通过 loader 属性指定要调用的 loader

options: { //通过 options 属性指定参数项

limit: 8196 //用来指定图片大小,单位是字节,小于limit的图片会被转成base64,以减少请求

}

}

}

]

}

高于webpack5的版本弃用了url-loader,且样式表中的url可以直接显示,若要继续使用url-loader,需要做一系列配置(文档:https://webpack.docschina.org/guides/asset-modules/

module: {

//文件后缀名的匹配规则

rules: [

//test表示匹配的文件类型,use表示对应要调用的loader

{

test: /\.(png|jpe?g|gif|svg)$/i,

use: [

{

loader: 'url-loader',

options: {

limit: 8196, //文件大小限制,单位为字节,小于此数字的图片会被转成base64,以减少请求

name: '[name].[hash:8].[ext]', //输出文件名;[]内表示变量;name:原图片名;hash:8:取8位哈希值;ext:文件扩展名

outputPath: 'images/', //输出目录

esModule: false //不用的是CommonJS规范

},

},

],

type: 'javascript/auto', //解决 asset 重复的问题

},

]

}

通过上面的配置,小于8196字节的图片,会被转成base64输出,大于8196字节的图片,会在output配置的输出目录下,创建images文件夹,并将图片放置其中。


打包处理高级js语法

包的名称如下

babel-loader

@babel/core

@babel/plugin-proposal-class-properties

安装babel-loader相关的包

npm i babel-loader @babel/core @babel/plugin-proposal-class-properties -D

配置babel-loader

在webpack.config.js的 module->rules数组中,添加loader规则如下:

{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
plugins: ['@babel/plugin-proposal-class-properties'],
}
}
}














微信小程序
大潇博客 版权所有 Copyright ©2016~2025
京ICP备17004217号-6  合作QQ:284710375
天玺科技