webpack 中的 loader

787 阅读2分钟

webpack 中的 loader

1.loader概述

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

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

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

2.loader 的调用过程

image-20210826214621368.png

3.打包处理css文件

1. 运行命令安装处理css文件的loader:

```
npm install style-loader css-loader -D
```

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

```
    module: { // 所以第三方模块的匹配规则
        rules: [ // 文件后缀名的匹配规则
            {test : /.css$/, use : ['style-loader', 'css-loader']}
        ]
    }
```

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

注意:

-   use数组中指定的loader顺序是固定的
-   多个loader的调用顺序是:从后往前调用

4.打包处理 less 文件

1. 运行命令安装处理less文件的loader:

```
npm install less-loader less -D
```

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

```
    module: { // 所以第三方模块的匹配规则
        rules: [ // 文件后缀名的匹配规则
            {test : /.less$/, use : ['style-loader', 'css-loader', 'less-loader']}
        ]
    }
```

5.打包处理样式表中与uri路径相关的文件

1. 安装命令:

```
npm i url-loader file-loader
```

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

```
    module: { // 所以第三方模块的匹配规则
        rules: [ // 文件后缀名的匹配规则
            {test : /.jpg|png|gif$/, use : 'url-loader'}
        ]
    }
```

其中 ? 之后的是loader的参数项:

-   limit用来指定图片的大小,单位是字节(byte)
-   只有 <= limit大小的图片,才会被转为base64格式的图片

3. loader的另一种配置方式

带参数项的loader还可以通过对象的方式进行配置:

```
module: { // 所以第三方模块的匹配规则
        rules: [ // 文件后缀名的匹配规则
            {test: /.jfif|png|jpg|gif$/, use: {
                    loader: "url-loader",
                    options: {
                        limit: 100857
                    }
                }
            }
        ]
    }
```

6.打包处理js文件中的高级语法

webpack只能打包处理一部分高级的JavaScript语法对于那些webpack无法处理的高级js语法,需要借助babel-loader进行打包处理。例如webpack无法处理下面的JavaScript代码:

class Person {
    // 通过static 关键字,为Person类定义了一个静态属性 info
    // webpack 无法打包处理“静态属性”这个高级语法
    static info = 'person info'
}
console.log(Person.info)

1. 安装babel-loader相关的包

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

2. 配置 babel-loader

在webpack.config.jsmodule -> rules 数组中,添加loader规则:

```
`{
    test: /.js$/,
     // exclude 为排除项
     // 表示 babel-loader 只需处理开发者编写的js文件,不需要处理node_modules下的js文件
     exclude: /node_modules/,
     use: {
            loader: "babel-loader",
             options: { // 参数项
             // 声明一个babel插件,此插件用来转化class中的高级语法
             plugins:[' @babel/plugin-proposal-class-properties']
             }
     }
}`
            
```