• 前端工程化之 webpack 中的 loader


    webpack 中的 loader

    1. loader 概述

    在实际开发过程中,webpack 默认只能打包处理以 .js 后缀名结尾的模块。其他非 .js 后缀名结尾的模块,

    webpack 默认处理不了,需要调用 loader 加载器才可以正常打包,否则会报错!

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

    • css-loader 可以打包处理 .css 相关的文件

    • less-loader 可以打包处理 .less 相关的文件

    • babel-loader 可以打包处理 webpack 无法处理的高级 JS 语法

    2. loader 的调用过程

    3. 打包处理 css 文件

    ① 运行 npm i style-loader@2.0.0 css-loader@5.0.1 -D 命令,安装处理 css 文件的 loader

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

    1. module: {  // 所有第三方文件模块的匹配规则
    2.    rules:[ // 文件后缀名的匹配规则
    3.       { test: /\.css, use: ['style-loader','css-loader'] }
    4.   ]
    5. }

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

    注意:

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

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

    4. 打包处理 less 文件

    ① 运行 npm i less-loader@7.1.0 less@3.12.2 -D 命令

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

    1. module: {
    2.    rules: [ // 文件后缀名的匹配规则
    3.       { test: /\.less$/,use: ['style-loader','css-loader','less-loader'] },
    4.   ]
    5. }

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

    ① 运行 npm i url-loader@4.1.1 file-loader@6.2.0 -D 命令

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

    1. module: {
    2.    rules: [ // 文件后缀名的匹配规则
    3.       { test: /\.jpg|png|gif$/,use: ['url-loader?limit = 22229'] },
    4.   ]
    5. }

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

    • limit 用来指定图片的大小,单位是字节(byte)

    • 只有 ≤ limit 大小的图片,才会被转为 base64 格式的图片

    5.1 loader 的另一种配置方式

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

    1. module: {
    2.    rules: [ // 文件后缀名的匹配规则
    3.       { test: /\.jpg|png|gif$/, // 匹配图片文件
    4.         use: {
    5.             loader: 'url-loader', // 通过 loader 属性指定要调用的 loader
    6.             options:{    // 通过 options 属性指定参数项
    7.             limit : 22229
    8.         }
    9.         }
    10.   ]
    11. }

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

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

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

    6.1 安装 babel-loader 相关的包

    运行如下的命令安装对应的依赖包:

    npm i babel-loader@8.2.1 @babel/core@7.12.3 @babel/plugin-proposal-properties@7.12.1 -D

    包的名称及版本号列表如下(前面是包的名称、@后面是包的版本号):

    • babel-loader@8.2.1

    • @babel/core@7.12.3

    • @babel/plugin-proposal-class-properties@7.12.1

    6.2 配置 babel-loader

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

    1. {
    2.    test: /\.js$/,
    3.        // exclude 为排除项,
    4.        // babel-loader 只需处理开发者编写的 js 文件,不需要处理 node_modules 下的 js 文件
    5.    exclude: /node_modules/,
    6.    use: {
    7.        loader: 'babel-loader',
    8.        option: {   // 参数项
    9.            // 声明一个 babel 插件,此插件用来转化 class 中的高级语法
    10.            plugins: ['@babel/plugin-propossal-class-properties'],
    11.       },
    12.   },
    13. }

  • 相关阅读:
    山西电力市场日前价格预测【2023-09-25】
    Android系统10 RK3399 init进程启动(三十八) 属性Selinux实战编程
    【大数据】flink 读取文件数据写入ElasticSearch
    【排序算法】常见排序算法总结
    Fill(填充)和Polygon(覆铜)盖油问题
    WPF 控件小技巧记录(持续更新)
    Stable Diffusion插件(翻译)
    鸿鹄工程项目管理系统 Spring Cloud+Spring Boot+Mybatis+Vue+ElementUI+前后端分离构建工程项目管理系统项目背景
    重新定义智能座舱「新打法」,全栈能力是唯一出路
    nginx配置中$http_host、$host、$host:$proxy_port和$host:$server_port区别
  • 原文地址:https://blog.csdn.net/qq_61950936/article/details/126303901