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

相关文章

  • numpy库的下载及安装(吐血总结)

    numpy库的下载及安装(吐血总结) NumPy是Python中用于科学计算的重要库之一,该库提供了大量高级的数值编程工具,适用于任何需要进行数据处理和分析的应用场景。但是,有时候刚刚学习Python的初学者可能会对NumPy的下载和安装过程感到困惑。本文将在吐血总结的基础上,为需要安装NumPy库的读者提供一些帮助。 下载NumPy库 NumPy库最简单的…

    其他 2023年3月29日
    00
  • Mybatis中ResultMap解决属性名和数据库字段名不一致问题

    Mybatis中的ResultMap是用于解决属性名和数据库字段名不一致问题的重要工具。它允许我们自定义Java对象属性和数据库表字段之间的映射关系,并通过这种方式来解决名称不匹配的问题。下面是在Mybatis中使用ResultMap的步骤和示例。 第一步:定义ResultMap要定义一个ResultMap,可以在mapper.xml文件中使用<res…

    other 2023年6月25日
    00
  • stringbuffer清空

    当然,我很乐意为您提供有关“StringBuffer清空”的完整攻略。以下是详细的步骤和两个示例: 1. StringBuffer清空 在Java中,StringBuffer是一个可变的字符串,可以用于动态构建字符串。有时,我们需要清空StringBuffer中的内容,以便重新使用它。以下是如何清空StringBuffer的方法。 2. StringBuff…

    other 2023年5月6日
    00
  • Python全局变量操作详解

    Python全局变量操作详解 在Python中,全局变量是在整个程序中都可以访问的变量。在函数内部,可以通过使用global关键字来访问和修改全局变量。本攻略将详细讲解Python中的全局变量操作。 定义全局变量 在函数外部定义的变量是全局变量。全局变量可以在程序的任何地方访问。 # 定义全局变量 global_var = 10 def func(): # …

    other 2023年7月28日
    00
  • 在Linux系统的服务器上隐藏PHP版本号的方法

    在Linux系统的服务器上隐藏PHP版本号可以通过以下步骤完成: 打开终端并登录到服务器。 找到并编辑PHP配置文件php.ini。通常,该文件位于/etc/php/目录下。使用以下命令打开文件: sudo nano /etc/php/php.ini 在php.ini文件中,查找并定位到以下行: expose_php = On 将其修改为: expose_p…

    other 2023年8月3日
    00
  • spring(六)之自动装配

    Spring(六)之自动装配 在Spring的IOC容器中,我们可以使用自动装配(Autowiring)来消除手动配置的繁琐,提高开发效率。 自动装配的方式 Spring提供了以下几种自动装配的方式: byName:按属性名自动注入 byType:按属性类型自动注入 constructor:按构造函数参数类型自动注入 autodetect:混合使用byTyp…

    其他 2023年3月28日
    00
  • 以太坊9月推出新测试网Holeky!解决Goerli测试币问题

    以太坊9月推出新测试网Holeky!解决Goerli测试币问题攻略 以太坊将于9月推出新的测试网Holeky,旨在解决Goerli测试币问题。本攻略将详细介绍如何使用Holeky测试网进行开发和测试。 步骤一:安装以太坊客户端 首先,您需要安装以太坊客户端,以便连接到Holeky测试网。以下是安装以太坊客户端的示例命令: $ npm install -g g…

    other 2023年7月27日
    00
  • Android中用Builder模式自定义Dialog的方法

    当在Android应用程序中需要自定义对话框时,可以使用Builder模式来创建和配置对话框。Builder模式提供了一种简洁的方式来构建和设置对话框的各个属性。下面是使用Builder模式自定义Dialog的方法的详细攻略: 创建自定义对话框的布局文件: 首先,创建一个XML布局文件来定义自定义对话框的外观和布局。例如,创建一个名为custom_dialo…

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