Webpack入门,常用loader

babel-loader

babel-loader用于处理ES6+并将其编译为ES5,它使开发者能够在工程中使用最新的语言特性,同时不必特别关注这些特性在不同平台的兼容问题。

在安装时推荐使用以下命令:

npm install babel-loader @babel/core @babel/preset-env -D

各个模块的作用如下:

  • babel-loader:它是使Babel与Webpack协同工作的模块。
  • babel/core:顾名思义,它是Babel编译器的核心模块。
  • babel/preset-env:它是Babel官方推荐的预置器。可根据用户设置的目标环境自动添加所需要的插件和补丁来编译ES6+代码。

在配置babel-loader时有一些需要注意的地方。

// webpack.config.js
module.exports = {
  ...
  module: {
    rules: [{
      test: /\.js$/,
      exclude: /node_modules/,
      use: {
        loader: "babel-loader",
        options: {
          cacheDirectory: true,
          presets: [[
            'env', {
               modules: false
             }
          ]]
        }
      }
    }]
  }
}

由于该规则中的babel-loader会对所有JS后缀文件生效,所以我们需要特别排除掉node_modules目录,否则会令babel-loader编译其中所有的模块,严重拖慢打包的速度,甚至改变第三方模块的原有行为。

对于babel-loader本身添加了cacheDirectory配置项,它会启用缓存机制,在重复打包未改变过的模块时防止二次编译,加快打包的速度。cacheDirectory可以接收一个字符串类型的路径来作为缓存路径,这个值也可以为true,此时其缓存目录会指向node_modules/.cache/babel-loader。

由于babel/preset-env会将ES6 Module转化为CommonJS的形式,这会导致Webpack中tree-shaking特性失效。将babel/presets-env的modules配置项设置为false会禁用模块语句的转化,而将ES6 Module的语法交给Webpack本身处理。

温馨提示

babel-loader支持从.babelrc文件读取Babel配置,因此可以将presets和plugins从Webpack配置文件中提取出来,效果是相同的。

ts-loader

ts-loader与babel-loader的性质类似,它是用于连接Webpack与TypeScript的模块。可以使用以下命令安装。

npm install ts-loader typescript -D

Webpack配置如下:

// webpack.config.js
module.exports = {
  ...
  module: {
    rules: [{
      test: /\.ts$/,
      use: 'ts-loader',
    }]
  }
}

需要注意的是,TypeScript本身的配置并不在ts-loader中,而是必须放在工程目录下的tsconfig.json中。

{
  "compilerOptions": {
    "target": "es5",
    "sourceMap": true,  
  }
}

通过TypeScript和ts-loader,开发者可以实现代码类型检查。

html-loader

html-loader用于将HTML文件转化为字符串并进行格式化,使得我们可以把一个HTML片段通过JS加载进来。

安装命令如下:

npm install html-loader -D

Webpack配置如下:

// webpack.config.js
module.exports = {
  ...
  module: {
    rules: [{
      test: /\.html$/,
      use: 'html-loader',
    }]
  }
}

handlebars-loader

handlebars-loader用于处理handlebars模板,在安装时要额外安装handlebars。

安装命令如下:

npm install handlebars-loader handlebars -D

Webpack配置如下:

// webpack.config.js
module.exports = {
  ...
  module: {
    rules: [{
      test: /\.handlebars$/,
      use: 'handlebars-loader',
    }]
  }
}

file-loader

file-loader用于打包文件类型的资源,并返回其publicPath。

安装命令如下:

npm install file-loader -D

Webpack配置如下:

// webpack.config.js
const path = require("path");
module.exports = {
  entry: "./app.js",
  output: {
    path: path.join(__dirname,'dist'),
    filename: 'bundle.js',
  },
  module: {
    rules: [{
      test: /\.(png|jpg|gif)$/,
      use: 'file-loader',
    }]
  }
}

上面的配置对png、jpg、gif这类图片资源使用file-loader,然后就可以在JS中加载图片了。

url-loader

url-loader的作用与file-loader类似,唯一的不同在于,url-loader允许用户设置一个文件大小的阈值,当大于该阈值时它会与file-loader一样返回publicPath,而小于该阈值时则返回base64形式的编码。

安装命令如下:

npm install url-loader -D

Webpack配置如下:

// webpack.config.js
module.exports = {
  ...
  module: {
    rules: [{
      test: /\.(png|gif|jpg)$/,
      use: {
        loader: 'url-loader',
        options: {
          limit: 10240,
          name: '[name].[ext]',
          publicPath: './assets-path/',
        }
      }
    }]
  }

原创文章,作者:ZERO,如若转载,请注明出处:https://www.edu24.cn/course/webpack-common-loader.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
ZEROZERO
上一篇 2022年11月21日
下一篇 2022年11月23日

相关推荐

  • JAVA学习之多线程知识点整理

    1、什么是进程?什么是线程? 进程是一个应用程序。线程是一个进程中的执行场景或者执行单元。一个进程可以启动多个线程。进程之间内存独立不共享。同一个进程中的线程之间,堆内存和方法区内…

    2020年6月19日
    1.3K
  • Java自学之继承

    在面向对象的设计过程中,类是基本的逻辑单位。但是对于这些基本的逻辑单位需要考虑到重用的设计问题,所以在面向对象的设计里提供有继承,并利用这一特点实现类的可重用性定义。 类继承定义 …

    2020年12月3日
    1.4K
  • Spring Boot的常用注解

    未来的框架趋势是“约定大于配置”,代码的封装会更加严密。开发人员会将更多的精力放在代码的整体优化和业务逻辑上,所以注解式编程会被更加广泛地使用。那么什么是注解?Spring Boo…

    2024年8月29日
    424
  • JavaScript中call、apply及bind的深度解析

    函数原型链中的 apply,call 和 bind 方法是 JavaScript 中相当重要的概念,与 this 关键字密切相关,相当一部分人对它们的理解还是比较浅显,所谓js基础…

    2019年8月5日
    1.6K
  • STS插件mybatis-generator安装及使用

    断断续续学习Java也有好长时间了,没有师傅带,没有项目练手,学习超级慢,也很烦。视频、书籍翻看了一大推,还是没有目标。 相信滴水成海,外加条条大路通罗马,只要坚持,自己终能达成目…

    2019年12月27日
    2.3K
  • spring boot练习篇之用户登录系统【接口篇】

    写在前面 抛弃JSP,只做纯粹的前后端分离项目。 作为一个资深前端工作者,想要转JavaWeb开发,无论是书籍,还是网上视频、资料,竟然没有一篇能清楚明白地讲解怎样搭建一个前后端分…

    2021年5月25日
    1.7K
  • CSS布局之圣杯与双飞翼布局

    所谓圣杯布局和双飞翼布局其实解决的问题是相同的,都是解决左右两栏固定宽度,中间部分自适应,其中某部分内容比其他内容高的时候,保证三者元素等高。他俩的区别就是:圣杯用padding。…

    2019年6月18日
    1.9K
  • CSS中的BFC是什么

    定义 一个块格式化上下文(block formatting context) 是Web页面的可视化CSS渲染出的一部分。它是块级盒布局出现的区域,也是浮动层元素进行交互的区域。 触…

    2022年11月5日
    547
  • Java自学之String类

    在实际项目开发中,String是一个必须使用的程序类,可以说是项目的核心组成类。在Java程序里所有的字符串都要求使用【’‘】进行定义,同时也可以利用【+】实现字符串的连接处理。 …

    2020年11月30日
    1.4K
  • 从零开始开发vue组件库

    前言 很早之前,就有开发一套vue组件库的想法,直到现在想法依旧只是想法。汗颜啊……此篇文章将讲述如何开发vue组件库,虽然文章标题为《从零开始开发vue组件库》,实际上是从搭建v…

    2024年6月23日
    686