详解Webpack抽离第三方类库以及common解决方案

yizhihongxing

Webpack是前端工程化中不可避免的一环,它可以将我们项目中的各种资源进行打包和压缩,使得项目的性能得到有效优化。其中webpack从v4开始,废弃了CommonsChunkPlugin插件,提供了新的功能:SplitChunksPlugin。它可以帮助我们更好的抽离第三方类库以及项目中常用模块。下面我们来详细讲解如何进行配置。

抽离第三方类库

Webpack打包出来的文件体积往往非常大,尤其是项目代码与第三方类库打包到同一个文件里面时,造成了巨大的体积浪费。因此,我们可以采用配置optimization的splitChunks选项来抽离第三方类库。

optimization: {
  splitChunks: {
    cacheGroups: {
      vendors: {
        test: /[\\/]node_modules[\\/]/,
        name: 'vendors',
        chunks: 'all'
      }
    }
  }
}
  • test: 匹配出需要抽离的模块。在当前例子中,test的值设置为/[\/]node_modules[\/],意味着抽离所有的node_modules中的模块。
  • name: 抽离出来的模块的名称,通常是一些第三方模块,本例中我们将其命名为vendors。
  • chunks:表示在哪些范围内进行抽离,包括'all', 'initial', 'async',分别对应全部抽离,同步抽离和异步抽离。

在webpack.config.js文件中加入以上配置后,Webpack就会在构建过程中自动将所有的第三方类库抽离到vendors.js文件中,而不是与我们的项目代码混在一起。

Common解决方案

在一些场景下,我们可能会发现一些非第三方的公共代码模块也被重复打包了多次,如何将这些公共代码模块也进行抽离呢?Webpack也提供了一种常用解决方案,也是利用optimization的splitChunks选项来实现。具体配置如下:

optimization: {
  splitChunks: {
    chunks: 'async',
    minSize: 30000,
    maxSize: 0,
    minChunks: 3,
    maxAsyncRequests: 5,
    maxInitialRequests: 3,
    automaticNameDelimiter: '~',
    cacheGroups: {
      commons: {
        name: 'commons',
        chunks: 'initial',
        minChunks: 2
      }
    }
  }
}
  • chunks: 需要抽离公共代码的范围。在此例子中,我们只需要抽离异步加载的代码(chunks: 'async')
  • minChunks: 模块至少被几个被引用(import)的模块使用的情况下才能被单独的打包为一个文件(默认为1)。
  • name: 抽离出来的模块的名称, 在此例子中,我们抽离出来的公共模块将被命名为commons。

利用以上配置,Webpack就可以自动将公共代码进行抽离,与第三方类库一样,也就实现了公共代码的单独打包,最终提高了整个项目的性能。

示例说明:

以react项目为例,我们在webpack.config.js文件中配置以下内容:

const path = require('path');

module.exports = {
  entry: './src/index.js',
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'dist')
  },
  optimization: {
    splitChunks: {
      cacheGroups: {
        vendors: {
          test: /[\\/]node_modules[\\/]/,
          name: 'vendors',
          chunks: 'all'
        },
        commons: {
          name: 'commons',
          chunks: 'async',
          minChunks: 2
        }
      }
    }
  }
}

可以看到,我们在optimization中同时配置了抽离第三方类库和公共代码。启动Webpack进行打包后,我们会发现在dist文件夹下生成了三个文件:bundle.js、commons.js和vendors.js,其中bundle.js为我们项目代码,commons.js为我们抽离出来的公共代码文件,vendors.js则是我们抽离出来的第三方类库文件。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Webpack抽离第三方类库以及common解决方案 - Python技术站

(0)
上一篇 2023年6月26日
下一篇 2023年6月26日

相关文章

  • vue3.0实现插件封装

    下面是关于Vue 3.0实现插件封装的完整攻略。 什么是Vue插件 Vue插件是一个自包含的Vue.js模块,它可以添加一些类似于指令、组件、实例方法、过滤器、或混入等等,来扩展Vue全局功能。主要包括以下部分: 注册全局组件 注册全局指令 注册全局过滤器 添加实例方法 添加静态资源 Vue 3.0插件的基本结构 在Vue 3.0中,插件需要暴露一个函数作为…

    other 2023年6月25日
    00
  • 浏览器预览PHP文件时顶部出现空白影响布局分析原因及解决办法

    浏览器预览PHP文件时顶部出现空白影响布局分析原因及解决办法攻略 问题描述 当在浏览器中预览PHP文件时,可能会遇到顶部出现空白的情况,这会影响页面的布局。本攻略将详细分析可能的原因,并提供解决办法。 原因分析 空白字符或输出:PHP文件中可能存在空白字符或输出语句,这些字符或语句会在页面渲染时输出到浏览器,导致顶部出现空白。这可能是由于文件中的空行、多余的…

    other 2023年9月5日
    00
  • C++ 手把手教你实现可变长的数组实现

    C++ 手把手教你实现可变长的数组实现 简介 C++ 是一门强大的编程语言,其拥有许多数据结构和算法,其中数组是最常用的一种数据结构。C++ 中的数组是一个固定长度的数据结构,一旦初始化后,其长度不可更改。但在实际编程中,经常需要使用可变长的数组,即数组长度可变的情况。本文将讲解如何在 C++ 中手动实现可变长数组。 实现 第一步:定义类和成员变量 为了实现…

    other 2023年6月25日
    00
  • Jboss Marshalling服务端无法接受消息

    问题描述: 在使用 JBoss Marshalling 进行序列化和反序列化过程中,某些情况下可能会面临“服务器中断”或“服务端无法接收消息”等问题,这些问题可能会让我们的程序无法正常工作,需要找到并解决这些问题。 解决方法: 以下是解决问题的详细步骤: 步骤 1:了解问题 首先,我们需要了解问题的具体原因。在使用 JBoss Marshalling 过程中…

    other 2023年6月27日
    00
  • Country使 MS-DOS 子系统能使用国际时间、日期、货币、大小写转换和小数分隔符

    Country使 MS-DOS 子系统能使用国际时间、日期、货币、大小写转换和小数分隔符攻略 1. 安装 Country 工具 首先,您需要安装 Country 工具,该工具可以使 MS-DOS 子系统支持国际化功能。您可以按照以下步骤进行安装: 打开命令提示符或 PowerShell 终端。 输入以下命令来下载 Country 工具: git clone …

    other 2023年8月18日
    00
  • opencv模板匹配函数matchtemplate详解

    OpenCV是一个流行的计算机视觉库,提供了许多图像处理和计算机视觉算法。其中之一是模板匹配,它可以在图像中查找特定的模式。在本攻略中,我们将介绍OpenCV中的模板匹配函数matchTemplate的细信息。 matchTemplate函数 matchTemplate函数是OpenCV中用于模板匹配的函数。它采用两个参数:源图像和模板像,并返回一个匹配结果…

    other 2023年5月7日
    00
  • Java中泛型通配符的使用方法示例

    Java中泛型通配符的使用方法示例 介绍 Java中的泛型通配符(Wildcard)是一种特殊的类型参数,用于表示未知的类型。通配符可以增加代码的灵活性,使得我们可以处理不同类型的数据。在本攻略中,我们将详细讲解泛型通配符的使用方法,并提供两个示例说明。 通配符的类型 Java中的通配符有两种类型:上界通配符(? extends T)和下界通配符(? sup…

    other 2023年6月28日
    00
  • Windows11值得升级吗 手把手教你升级win11

    Windows 11值得升级吗 Windows 11是微软全新推出的操作系统,取得了广泛的关注和讨论。那么,Windows11值得升级吗?答案是要看用户个人的需求和喜好。下面我会介绍如何手把手教你升级Win11,并提供一些用户在升级前需要注意的事项。 步骤一:检查设备是否符合升级条件 首先,用户需要检查自己的设备是否符合升级Windows 11的条件。具体而…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部