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日

相关推荐

  • CSS让内容居中的方法总结

    内容水平居中  分行内元素与块级元素两种情况;其中块级元素又分定宽与不定宽两种情况; 行内元素 首先看它的父元素是不是块级元素,如果是,则直接给父元素设置 te…

    2019年6月28日
    3.3K
  • Java自学之泛型

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

    2020年12月8日
    1.2K
  • 创建JavaScript对象的六种方式

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

    2020年6月24日
    1.3K
  • 两栏布局之左侧固定,右侧自适应的实现方法

    实现左侧固定,右侧自适应的两栏布局的方法有很多。其中经常用到的有float方法、BFC方法、CSS3的flex布局及grid布局。并非所有的布局都会在开发中使用,但是其中也会涉及一些知识点。

    2018年10月13日
    2.5K
  • Webpack入门,自定义loader

    有时开发者会遇到现有loader无法很好满足需求的情况,这时就需要对其进行修改,或者编写新的loader。 下面以一个简单的示例,讲解以下如何实现一个loader。 需求 实现一个…

    2022年11月23日
    704
  • Java自学之数组

    在Java中数组是一组相关变量的集合,属于引用数据类型。 定义 数组引用传递分析 数组属于引用数据类型,在数组使用时需要通过关键字new开辟堆内存空间,一块堆内存空间也可以同时被多…

    2020年11月26日
    1.2K
  • flex布局详解

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

    2018年9月10日
    2.2K
  • 函数防抖与函数节流

    函数防抖 定义 触发高频事件后 n 秒内函数只会执行一次,如果 n 秒内高频事件再次被触发,则重新计算时间;更直白一点就是:一个需要频繁触发的函数,在规定时间内,只让最后一次生效,…

    2020年7月17日
    1.4K
  • css布局基础总结

    前端css布局知识繁杂,实现方式多种多样。想写出高效、合理的布局,必须以深厚的css基础为前提。为了方便记忆和复习,将css布局要点记录如下。内容较多,应用方面说的不太详细,但都是…

    2018年9月13日
    2.3K
  • Webpack入门,模块打包原理分析

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

    2022年11月14日
    715