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日

相关推荐

  • 如何封装JDBC工具类读取properties配置文件连接数据库

    思路 之前已经写过一片《封装JDBC工具类,连接MySQL数据库》,讲解了如何封装JDBC工具类。但是在实际的应用中往往是把数据库连接的相关信息写在一个配置文件中,让程序自己去读取…

    2022年4月2日
    889
  • spring boot练习篇之用户登录系统【接口篇】

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

    2021年5月25日
    1.7K
  • MySQL数据库基础之索引相关知识点整理

    数据库对象索引的出现,除了可以提高数据库管理系统的查找速度,而且还可以保证字段的唯一性,从而实现数据库表的完整性。 MySQL支持6种索引:普通索引、唯一索引、全文索引、单列索引、…

    2020年7月9日
    1.7K
  • 初识Spring Boot

    什么是Spring Boot Spring Boot是由Pivotal Software公司于2013年研发的全新Java开发框架。其设计目的是用来简化新Spring应用的初始搭建…

    2024年6月16日
    493
  • JAVA学习路线之夯实基础

    第一章 开发环境 JDK(Java SE Development Kit),Java标准版开发包,提供编译、运行Java程序所需的各种工具和资源,包括Java编译器、Java运行环…

    2020年1月14日
    1.7K
  • windows下使用Docker Desktop安装nacos与mysql,实现互通访问

    1、命令行拉取MySQL镜像 打开命令提示符,运行以下命令安装mysql 2、运行mysql镜像,启动mysql实例 3、命令行拉取nacos镜像 4、运行nacos镜像,启动na…

    2022年10月27日
    467
  • Webpack入门,模块打包原理分析

    面对工程中成百上千个模块,Webpack究竟是如何将它们有序地组织在一起,并按照开发者预想的顺序运行在浏览器上的呢?本篇文章将通过一个简单的示例。分析一下Webpack模块打包的原…

    2022年11月14日
    804
  • MyBatis配置之properties属性详解

    之前写了一篇《如何搭建MyBatis开发环境》,通过一个简单的实例讲解了关于搭建MyBatis的开发环境,这篇将详细讲解MyBatis的配置。 MyBatis配置文件的层次结构 这…

    2022年4月18日
    796
  • Java自学之内部类

    内部类是一种常见的嵌套结构,利用这样的结构使得内部类可以与外部类共存,并且方便地进行私有操作的访问。 内部类基本概念 内部类(内部定义普通类、抽象类、接口的统称)是指一种嵌套的结构…

    2020年12月14日
    1.5K
  • js数组去重(区分object、“NaN”、NaN)

    数组去重在前端面试中比较常见,今天来复习复习。 对这样一个数组进行去重,我尝试了几种方法,大多数不能对对象去重,或者不能区分true和”true”、NaN和…

    2021年2月23日
    1.3K