详解webpack4之splitchunksPlugin代码包分拆

下面是“详解webpack4之splitchunksPlugin代码包分拆”的完整攻略:

1. splitchunksPlugin是什么

SplitchunksPlugin是webpack4中的一个插件,用于将代码块分离成不同的文件,以实现优化性能和减小代码体积的目的。

2. 配置示例

让我们在webpack.config.js文件中创建一个新的optimization对象并为其添加splitChunks选项。它的最小配置如下:

module.exports = {
  // ...
  optimization: {
    splitChunks: {
      chunks: 'async',
    },
  },
};

在上面的示例代码中,我们仅仅指定了chunks选项,这指定了webpack只在异步加载时分离代码块,这是唯一的条件。实际上,这个示例并不会生成额外的chunk。

我们还可以添加其他的选项来进一步调整splitChunks行为以及生成的代码块数量。比如,我们可以指定minSize选项以限制允许分割的最小文件大小。我们还可以设置maxSize选项以指定允许的最大文件大小。

下面是一个更完整的splitChunks示例:

module.exports = {
  // ...
  optimization: {
    splitChunks: {
      chunks: 'async',
      minSize: 30000,
      maxSize: 0,
      minChunks: 1,
      maxAsyncRequests: 5,
      maxInitialRequests: 3,
      automaticNameDelimiter: '~',
      name: true,
      cacheGroups: {
        vendors: {
          test: /[\\/]node_modules[\\/]/,
          priority: -10,
        },
        default: {
          minChunks: 2,
          priority: -20,
          reuseExistingChunk: true,
        }
      }
    },
  },
};

3. 示例说明

示例1:基本示例

我们首先来看一个简单的示例:

<!DOCTYPE html>
<html>
  <head>
    <title>SplitChunksPlugin示例1</title>
    <script src="app.js"></script>
    <script src="vendor.js"></script>
  </head>
  <body>
    <!-- 页面内容 -->
  </body>
</html>

在上述示例中,我们已经通过script标签在页面上嵌入了两个JavaScript文件:

  • app.js 包含我们自己的代码
  • vendor.js 包含所有第三方库和框架

这个示例很简单,但是我们可以使用webpack的splitChunks插件将这两个JavaScript文件分开来。

我们可以在webpack.config.js中使用以下代码:

module.exports = {
  // ...
  optimization: {
    splitChunks: {
      chunks: 'all'
    }
  }
};

这个示例中,我们指定了all选项,这意味着webpack将尝试将所有公共模块分离出来并创建新的chunk。我们可以运行webpack并看看生成了什么文件:

$ npx webpack

这里我们得到两个新的文件:vendors~app.jsapp.js

  • vendors~app.js包含所有的第三方库和框架。
  • app.js包含我们自己的代码。

我们可以从HTML页面中删除vendor.js标签并替换为新生成的vendors~app.jsapp.js标签:

<!DOCTYPE html>
<html>
  <head>
    <title>SplitChunksPlugin示例1</title>
    <script src="vendors~app.js"></script>
    <script src="app.js"></script>
  </head>
  <body>
    <!-- 页面内容 -->
  </body>
</html>

现在,我们已经成功地使用splitChunks插件将公共模块分离出来并作为新的chunk生成了一个文件。

示例2:使用cacheGroups选项

我们已经看到了通过简单地配置splitChunks选项,我们就可以将多个JavaScript文件分离成更小的文件。但是,在实际的项目中,如果我们需要更细粒度的控制,例如将所有符合特定条件的文件分离出来并创建一个新的公共模块,我们需要使用cacheGroups选项。

让我们使用optimization.splitChunks.cacheGroups选项来匹配所有在node_modules目录下的文件,并以vendors命名新的chunk,并设置优先级较高,以便尝试优先使用这个chunk,而不是默认的“commons”chunk。

module.exports = {
  // ...
  optimization: {
    splitChunks: {
      cacheGroups: {
        vendors: {
          test: /[\\/]node_modules[\\/]/,
          priority: -10,
          name: 'vendors',
          chunks: 'all'
        }
      }
    }
  }
};

重新运行webpack命令,我们可以看到新生成的文件:vendors.jsapp.js

$ npx webpack

我们可以修改HTML页面,并使用新的文件名:

<!DOCTYPE html>
<html>
  <head>
    <title>SplitChunksPlugin示例2</title>
    <script src="vendors.js"></script>
    <script src="app.js"></script>
  </head>
  <body>
    <!-- 页面内容 -->
  </body>
</html>

现在vendors.js已经包含了我们选择的所有第三方依赖库,并且只有在需要的时候才会被加载,这可以显著提高性能。

以上就是详解webpack4之splitchunksPlugin代码包分拆的完整攻略,希望能对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解webpack4之splitchunksPlugin代码包分拆 - Python技术站

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

相关文章

  • Java网页数据采集器[中篇-数据存储]【转载】

    Java网页数据采集器[中篇-数据存储]【转载】 在本系列文章的前两篇,我们介绍了如何使用Java爬虫技术从网页上采集数据,并实现了基本的数据清理和处理。然而,我们在爬取网页数据的同时还需要将这些数据存储到数据库中,以便于数据分析和应用。因此,在本篇文章中,我们将会讨论如何使用Java将爬虫获取到的数据存储到MySQL数据库中。 MySQL数据库的安装和配置…

    其他 2023年3月28日
    00
  • C++11中内联函数(inline)用法实例

    下面是C++11中内联函数的详细讲解和实例说明。 什么是内联函数 内联函数是在程序运行时,将函数调用处直接替换成函数体,以避免函数调用带来的额外开销和时间浪费。在C++中,可以使用inline关键字来声明一个函数是内联函数。 内联函数的用法 内联函数通常用于执行简单的、轻量级的操作,常见的操作包括返回某个常量值或者进行一些简单的求和运算等,这些操作的开销非常…

    other 2023年6月26日
    00
  • 全网非常详细的pytest配置文件

    当我们在使用pytest进行测试时,有时候需要定制一些配置来更好地满足我们的需求。因此,编写一个全网非常详细的pytest配置文件可以帮助我们更好地进行测试。以下是完整攻略: 编写pytest配置文件 在项目根目录下创建一个pytest.ini文件,将以下内容写入其中: [pytest] addopts = -s -v testpaths = ./tests…

    other 2023年6月25日
    00
  • Java编程经典小游戏设计-打砖块小游戏源码

    Java编程经典小游戏设计-打砖块小游戏源码是一个使用Java编写的小游戏,它的核心部分是基于Java的Swing和AWT库,同时也使用了Java的多线程技术。在这个小游戏中,游戏的主角是一个挥动球拍的玩家,他需要利用球拍反弹弹球并把砖块打碎以获取分数。在这个游戏中,玩家需要时刻保持注意力,才能在最短时间内打碎所有的砖块。 为了更好地理解这个小游戏的设计和实…

    other 2023年6月27日
    00
  • Android学习之使用SharedPreferences存储应用程序数据

    让我来为你详细讲解 “Android学习之使用SharedPreferences存储应用程序数据” 的完整攻略。 什么是SharedPreferences? SharedPreferences是Android中的一个轻量级存储类,用来保存应用程序的配置信息或者一些简单的数据。 SharedPreferences本质上是一个基于XML文件存储键值对的数据结构,…

    other 2023年6月25日
    00
  • 为应用程序池 ‘DefaultAppPool’ 提供服务的进程意外终止。进程 ID 是 ‘3160’问题的解决方法

    当一个应用程序池在IIS中启动并运行.NET应用程序时,有时候可能会遇到”为应用程序池 ‘DefaultAppPool’ 提供服务的进程意外终止。进程 ID 是 ‘xxxx'”错误。这种错误通常发生在IIS正在运行过程中,影响应用程序的操作。 下面是一些可能导致这个错误的原因以及如何解决这个问题的方法: 原因: 应用程序崩溃或出现异常:应用程序在IIS上运行…

    other 2023年6月25日
    00
  • Android 内存溢出和内存泄漏的问题

    Android 内存溢出和内存泄漏问题攻略 1. 内存溢出问题 内存溢出是指应用程序在申请内存时,没有足够的可用内存供其使用,导致程序崩溃或异常终止。以下是解决内存溢出问题的一些步骤: 步骤一:分析内存使用情况 使用Android Profiler或其他性能分析工具来监测应用程序的内存使用情况。观察内存使用的峰值和变化趋势,找出可能导致内存溢出的原因。 步骤…

    other 2023年8月1日
    00
  • 深入了解Vue之组件的生命周期流程

    当我们在Vue中定义一个组件时,该组件拥有多个生命周期函数,这些函数可以帮助我们在特定时间点执行一些任务,从而让我们更好地控制组件。 Vue组件的生命周期函数可以分为三个阶段:创建阶段、更新阶段和销毁阶段,以下是对每个阶段及其相关生命周期函数的详细说明。 创建阶段 在创建阶段中,涉及到以下生命周期函数: beforeCreate:在实例创建之前调用。此时,该…

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