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

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日

相关文章

  • mysql字符串拼接的4种方式总结

    MySQL 字符串拼接的 4 种方式总结 MySQL 中字符串拼接是经常使用的操作,针对不同的场景,有不同的拼接方式,本文总结了 MySQL 中常见的 4 种字符串拼接方式,并给出了使用示例。 1. 使用 CONCAT 函数拼接字符串 使用 CONCAT 函数可以将多个字符串连接成一个字符串,同时,也支持连接任意类型的值,如数字、日期等。 语法: CONCA…

    other 2023年6月20日
    00
  • C++中的三大函数和操作符重载(Boolan)

    C++中的三大函数和操作符重载(Boolean) 在C++中,函数和操作符的重载旨在提高代码的可读性和可维护性。C++中常见的三大函数重载是构造函数、拷贝构造函数、析构函数,而Boolean操作符重载则是其中的重要一部分,本篇文章将详细讲解这部分内容。 布尔类型 布尔类型是一个具有两个值的数据类型:true和false。在C++中,bool类型的数据可以通过…

    other 2023年6月26日
    00
  • if语句break用法

    当然,我很乐意为您提供有关“if语句break用法”的完整攻略。以下是详细的步骤和两个示例: 1. if语句 if语句是一种条件语句,用于根据条件执行不同的代码块。if语句通常使用布尔表达式来判断条件是否成立。 以下是if语句的基本语法: if condition: # code block 在这个示例中,我们使用if语句来判断条件是否成立。如果条件成立,就…

    other 2023年5月6日
    00
  • ASP.NET在IE10中无法判断用户已登入及Session丢失问题解决方法

    ASP.NET在IE10中无法判断用户已登录及Session丢失问题解决方法攻略 问题描述 在使用ASP.NET开发Web应用程序时,有时会遇到在IE10浏览器中无法判断用户是否已登录以及Session丢失的问题。这可能导致用户无法正常使用应用程序的功能。 解决方法 以下是解决ASP.NET在IE10中无法判断用户已登录及Session丢失问题的攻略: 1.…

    other 2023年8月5日
    00
  • iOS13.2正式版固件下载地址 iOS13.2正式版下载

    iOS13.2正式版固件下载地址 iOS13.2正式版固件是苹果公司最新发布的操作系统版本,提供了许多新功能和改进。以下是获取iOS13.2正式版固件的完整攻略。 步骤一:检查设备兼容性 首先,确保你的设备兼容iOS13.2正式版。以下是支持iOS13.2的设备列表: iPhone:iPhone 6s及以上型号 iPad:iPad Air 2及以上型号、iP…

    other 2023年8月4日
    00
  • Java多线程之彻底搞懂线程池

    Java多线程之彻底搞懂线程池 什么是线程池 线程池是一种线程管理技术,它包括一些线程,等待着需要执行的任务。当一个任务到来时,得到一个线程池中的空闲线程来处理该任务,这些线程被称为工作线程。当任务执行完毕,工作线程并不会被销毁,而是被放回线程池中等待下一个任务的到来。 Java中的线程池 Java提供了一个线程池框架——java.util.concurre…

    other 2023年6月27日
    00
  • chanel是什么品牌

    Chanel 品牌全攻略 Chanel 是法国著名时尚品牌,始建于1909年,现为全球最有影响力的奢侈品牌之一,其标志性设计与标志性花纹,在时尚界备受关注。 Chanel 品牌历史 1909年,Gabrielle “Coco” Chanel 在法国巴黎成立了一家帽子店起家,并逐渐发展为现在的奢侈品品牌 Chanel。品牌的成立标志着一种崭新的时尚风格的形成—…

    其他 2023年4月16日
    00
  • 微信小程序 app.json 配置

    微信小程序 app.json 配置 微信小程序的开发中,每个小程序都需要一个 app.json 文件来进行全局性质的配置,包括小程序的页面路由、窗口颜色、导航栏样式等内容,下面我们来逐一介绍 app.json 的配置选项及其作用。 页面路由配置 app.json 中的 pages 配置项,用于指定小程序的所有页面路径。其中,第一个页面为小程序的首页,也是小程…

    其他 2023年3月28日
    00
合作推广
合作推广
分享本页
返回顶部