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

Like (0)
Donate 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
ZEROZERO
Previous 2022年11月21日
Next 2022年11月23日

相关推荐

  • 创建vue3 + typescript项目说明

    创建项目 选择Manually select features【手动配置】 如上图选择配置项,并在下一步,选择3.x 接下来,按照推荐设置,进行选择【推荐设置都已英文字母大写的形式…

    2023年11月23日
    505
  • MyBatis之MyBatis-Generator标签配置及意义

    DTD 标签 <generatorConfiguration/>: 根标签,所有的配置都必须在该标签内配置;没有属性 <properties/>: 主要引用外部的pro…

    2019年12月27日
    1.8K
  • 日常开发 26 个常见的 JavaScript 代码优化方案

    1、NULL、Undefined、”【空】检查 我们在创建新变量赋予一个存在的变量值的时候,并不希望赋予null或undefined,我们可以采用以下简洁的赋值方式。 …

    2021年2月22日
    1.2K
  • flex布局详解

    往往在移动端开发过程中,弹性布局是非常实用的一种手段。往往你并不需要去反复的使用媒体查询的。整整的响应式布局是使界面能够自动的根据屏幕进行变化,做到完美的弹性布局,在必要的时候,去…

    2018年9月10日
    2.2K
  • MySQL数据库基础之索引相关知识点整理

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

    2020年7月9日
    1.5K
  • Webpack入门,模块打包之CommonJS简介

    CommonJS 说到前端的模块,不得不讲一下CommonJS。CommonJS是由JavaScript社区于2009年提出的包含模块、文件、IO、控制台在内的一系列标准。Node…

    2022年11月10日
    465
  • JavaScript 事件委托详解

    基本概念 事件委托,通俗地来讲,就是把一个元素响应事件(click、keydown……)的函数委托到另一个元素; 一般来讲,会把一个或者一组元素的事件委托到…

    2021年3月8日
    1.0K
  • Java自学之泛型

    在Java语言中,为了方便接收参数类型的统一,提供了核心类Object,利用此类对象可以接收所有类型的数据(包括基本数据类型和引用数据类型)。但是由于其所描述的数据范围过大,所以在…

    2020年12月8日
    1.2K
  • 如何封装JDBC工具类读取properties配置文件连接数据库

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

    2022年4月2日
    788
  • 创建JavaScript对象的六种方式

    第一种:Object 构造函数创建 这行代码创建了 Object 引用类型的一个新实例,然后把实例保存在变量 Person 中。 第二种:使用对象字面量表示法 对象字面量是对象定义…

    2020年6月24日
    1.2K