详解webpack4之splitchunksPlugin代码包分拆

yizhihongxing

下面是“详解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日

相关文章

  • mysql递归函数with recursive的用法举例

    当我们需要处理一些具有层级结构的数据时,递归函数是非常有用的工具。MySQL提供了一种叫做with recursive的语法,用于创建递归函数。本攻略将详细讲解with recursive的用法,并提供两个示例说明。 什么是with recursive with recursive语法通过使用with关键词和recursive关键词来定义递归函数。其中,wi…

    other 2023年6月27日
    00
  • mysql数据库优化原则

    下面是关于MySQL数据库优化原则的完整攻略,包括原则、方法和两个示例说明。 原则 MySQL数据库优化的原则包括以下几点: 优化查询语句: 查询语句是MySQL数据库的核心操作,需要优化查询语句以提高查询效率和减少资源消耗。 优化索引: 索引是MySQL数据库的重要组成部分,需要优化索引以提高查询效率和减少资源消耗。 优化表结构: 表结构是MySQL数据库…

    other 2023年5月6日
    00
  • C++异步操作future和aysnc与function和bind

    C++中,异步操作future和async与function和bind是实现多线程编程和提高程序性能非常常用且重要的功能。下面我将为大家详细讲解它们的使用攻略。 异步操作future和async 在进行耗时的操作时,我们通常希望使用异步操作来避免主线程阻塞。C++11及之后的版本中,提供了future和async类来实现异步操作。 future类 futur…

    other 2023年6月27日
    00
  • 虚拟主机下实现多域名绑定不同的子目录的方法

    首先,我们需要了解什么是虚拟主机和多域名绑定。 虚拟主机是在一台物理服务器上,通过技术手段将多个网站分别托管在不同的虚拟主机上,并通过不同的域名访问这些网站的服务。虚拟主机一般通过HTTP服务器软件来实现,例如Apache、Nginx等。 多域名绑定是指在同一台服务器上,通过DNS解析将多个域名解析到同一个IP地址上,并通过HTTP服务器软件将这些域名所对应…

    other 2023年6月27日
    00
  • 巫师3狂猎N卡跳出及未响应的快速解决方法_巫师3跳出怎么办

    巫师3狂猎N卡跳出及未响应的快速解决方法 如果你在玩《巫师3狂猎》,遇到了游戏跳出游戏或无响应的情况,可能会很让人苦恼。但不要担心,本文将提供几种解决方法,帮助你快速解决这些问题。 问题1:游戏跳出 解决方法: 步骤1:打开游戏安装目录,找到“user.settings”文件 步骤2:打开“user.settings”文件,找到[Display]选项。 步骤…

    other 2023年6月27日
    00
  • 2.4 小白必看:零基础安装Linux系统(超级详细)

    @CachePut是Spring Boot框架中的一个注解,用于将方法的返回值更新到缓存中。本文将详细讲解@CachePut的作用和使用方法,并提供两个示例说明。 作用 @CachePut注解的作用是将方法的返回值更新到缓存中,以保证缓存中的数据与数据库中的数据一致。 使用方法 使用@CachePut注解时,需要在应用程序的主类上添加@EnableCachi…

    other 2023年5月5日
    00
  • Android 中基于TabLayout+ViewPager实现标签卡效果

    Android 中基于 TabLayout+ViewPager 实现标签卡效果攻略 1. 添加依赖库 首先,在项目的 build.gradle 文件中添加以下依赖库: implementation ‘com.google.android.material:material:1.4.0’ 2. 布局文件 在布局文件中,使用 TabLayout 和 ViewPa…

    other 2023年9月6日
    00
  • 如何用sha256进行简单的加密或者解密

    如何用SHA256进行简单的加密或者解密 SHA(Secure Hash Algorithm)是一种加密算法,它是一种哈希函数,被用于对任意长度的消息(明文)计算出一个固定长度的消息摘要(密文)。SHA256是SHA系列算法中最常用的一种,它生成的摘要长度为256位,被广泛用作数字签名、消息认证、防篡改等方面。 SHA256的实现 一般情况下,我们不需要自己…

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