详解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日

相关文章

  • iPadOS16固件下载地址 iPadOS16正式版下载

    很抱歉,但我无法提供关于非官方或未经授权的软件下载的信息。我建议您在苹果官方网站或其他可信的来源上查找iPadOS 16固件的下载地址。这样可以确保您下载到的是正式版,并且可以避免潜在的安全风险。 作为示例,我可以为您提供一些标准的markdown格式文本,以便您在其他场景下使用: iPadOS 16固件下载攻略 步骤1:访问官方网站 首先,打开您的浏览器并…

    other 2023年8月4日
    00
  • 优化MyBatis配置文件中的配置详解

    优化MyBatis配置文件是提高应用性能和稳定性的重要手段,本文将详细讲解如何优化MyBatis配置文件,并提供两条示例说明。 一、数据库连接池的配置 数据库连接池是连接到数据库的中间层,对于应用程序而言,它与数据库直接的连接交给了连接池处理。连接池默认是支持多线程的,因此它可以确保线程安全。对于MyBatis框架而言,数据库连接池需要在MyBatis配置文…

    other 2023年6月25日
    00
  • Win10预览版14316通知消息怎么设置优先级?

    设置Win10预览版14316通知消息优先级的攻略 1. 打开通知和操作中心设置 在Win10预览版14316中,可以通过以下步骤打开通知和操作中心设置: 点击任务栏右侧的系统托盘中的通知图标(一个气泡状图标); 在弹出的通知面板中,点击右下角的“所有设置”按钮; 在弹出的“Windows设置”窗口中,点击左侧导航栏中的“系统”选项; 在“系统”选项卡中,点…

    other 2023年6月28日
    00
  • linux驱动框架之framebuffer驱动框架

    Linux驱动框架之Framebuffer驱动框架 什么是Framebuffer驱动框架 Framebuffer驱动框架是Linux内核中的一个高级别驱动框架,主要用于支持图形显示。和传统的字符终端不同,Framebuffer驱动框架可以以图形化的方式显示信息,提供更加友好的用户界面。 Framebuffer驱动框架对应的设备文件是/dev/fb0,通过这个…

    其他 2023年3月28日
    00
  • 以数据说话 常见四热管CPU散热器对比测试

    以下是常见四热管CPU散热器对比测试的完整攻略: 实验目的 比较常见的四热管CPU散热器在散热性能方面的差异,以帮助用户选择适合自己需求的散热器。 实验材料 四热管CPU散热器A 四热管CPU散热器B 四热管CPU散热器C 四热管CPU散热器D CPU散热测试平台 温度计 热导胶 实验步骤 准备测试平台:将CPU散热器A安装在测试平台上,并使用热导胶将其与C…

    other 2023年10月16日
    00
  • Java实现去重的方法详解

    Java实现去重的方法详解 什么是去重? 去重是指在一组数据中,将重复的数据剔除,仅保留一个或几个不重复的数据,以达到简化数据的目的。在数据处理和分析等场景中,去重是常见的操作。 去重的原理 根据数据结构和算法的知识,实现去重可以采用哈希表、二叉树、排序等方法。其中,哈希表在处理海量数据时效率较高,是一种常用的去重方法。 Java中去重的实现方法 方法一:利…

    other 2023年6月26日
    00
  • java 多线程死锁详解及简单实例

    Java多线程死锁详解及简单实例 定义 多线程死锁指的是两个或者多个线程在等待对方释放所持有的锁,从而进入了死锁状态,无法继续执行,也无法退出。 死锁产生的条件 多线程死锁产生的条件如下: 互斥:至少有一个资源是被独占的,如一个文件、一张表或一个锁等。 持有和等待:至少有一个进程正持有一个资源,并等待其他的资源。 非抢占性:资源不能被抢占,只有持有资源的进程…

    other 2023年6月27日
    00
  • 微软 Win11 全新现代任务管理器更多曝光功能体验:支持 App 健康、电池健康、新启动项

    微软 Win11 全新现代任务管理器功能体验攻略 微软近日将 Win11 改版任务管理器的一些新功能曝光了出来。这些新功能增强了 Win11 任务管理器的任务管理能力,包括支持 App 健康、电池健康、新启动项等,更精准了解系统状态和开机启动项。下面是这些新功能的详细说明: 支持 App 健康 Win11 任务管理器支持了 App 健康统计数据。在进程列表中…

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