Webpack4 优化之 SplitChunksPlugin 配置详解

Webpack4 优化之 SplitChunksPlugin 配置详解

随着前端项目越来越庞大,模块化程度越来越高,打包构建工具的优化越来越被重视。其中,Webpack 是目前最流行的前端打包工具之一。在 Webpack 中,提供了一个插件 SplitChunksPlugin,旨在优化打包后的文件体积,得到更好的用户体验。

  1. 什么是 SplitChunksPlugin?

SplitChunksPlugin 是 Webpack 提供的一个插件,用于分割代码块,实现对共享模块的抽离,将公共部分分离成单独的文件。这样,用户在打开网页时只需要下载需要的代码,而不需要重复下载公共代码,有效减少了网页加载时间,提高了用户体验。

  1. 如何配置 SplitChunksPlugin?

在 Webpack 4 中,SplitChunksPlugin 提供了默认的配置项,可以直接在 Webpack 配置文件中使用。如下:

------------- -
  ------------ -
    ------- --------
    -------- ------
    -------- --
    ---------- --
    ----------------- --
    ------------------- --
    ----------------------- ----
    ----- -----
    ------------ -
      -------- -
        ----- -------------------------
        --------- ---
      --
      -------- -
        ---------- --
        --------- ----
        ------------------- ----
      -
    -
  -
-

上面的配置项可以分为两部分,一部分为针对所有模块的通用配置,另一部分为指定打包后的文件名称、路径等配置。

(1)通用配置项说明

① chunks:表示从哪些模块中抽取共享代码块,可选值为 all、async、initial,默认为 async。

② minSize:表示当抽离的模块大小(以 bytes 为单位)达到这个值时才会被抽取成一个新的 chunk。

③ maxSize:表示当抽离的模块大小超过这个值时,将尝试分成更小的 chunks。默认为 0,表示不限制最大大小。

④ minChunks:表示被提取公共代码块的最小复用次数,默认为 1。

⑤ maxAsyncRequests 和 maxInitialRequests:异步和非异步加载的最大并行请求数量,默认为 5 和 3。

⑥ automaticNameDelimiter:自动生成的名称的连接符。

⑦ name:表示拆分出来文件的名称,默认为 true,表示自动生成名称。

⑧ cacheGroups:用于覆盖和修改 chunkGroups 中属性的默认值。

(2)cacheGroups 配置项说明

cacheGroups 用于对代码块进行规则匹配,实现对共享模块的抽离。这里提供了两个默认的 cacheGroups:vendors 和 default。

① vendors: 代码来自 node_modules,优先级为 -10,表示先抽离出来。test 表示匹配的文件路径,priority 表示权重,权重越大,优先级越高。

② default: 默认规则,指定模块最少被使用多少次才会被拆分成 chunk。reuseExistingChunk 表示是否复用已经存在的 chunk。

  1. SplitChunksPlugin 的实践

下面给出一个实践例子:

----- ---- - ----------------
----- ----------------- - -------------------------------

-------------- - -
  ------ -
    ---- -----------------
    ------ ----------------
  --
  -------- -
    --- -------------------
      ------ ----- ----------
    --
  --
  ------------- -
    ------------ -
      ------- ------
      ----- --------
    -
  --
  ------- -
    --------- ------------------------
    ----- ----------------------- -------
  -
--

上面的例子中,我们以两个入口文件 app 和 print 为例,通过配置 optimization.splitChunks 实现共享模块的抽离,生成 common.js 文件。

这里需要特别注意的是,为了实现部分缓存,生成的文件名使用 chunkhash 而非 hash。这是因为只有相同的 hash 才会被缓存,而每个文件的 hash 值是不同的,这会使得缓存失效。

  1. 总结

通过本文的介绍,我们了解了 SplitChunksPlugin 的作用及详细配置项。在实际项目开发中,合理配置 SplitChunksPlugin 可以显著改善网页性能,缩短用户等待时间,提高用户体验。

参考链接:

Webpack SplitChunksPlugin:https://webpack.js.org/plugins/split-chunks-plugin/

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/645cea95968c7c53b0f71dd6


猜你喜欢

  • 使用 Mocha 进行前端单元测试的技巧

    在前端开发中,单元测试是不可或缺的一环。Mocha 是一款非常流行的 JavaScript 单元测试框架,它提供了丰富的功能,可以帮助我们更轻松地编写和执行测试代码。

    1 年前
  • Koa2 与 ES7 的 Async/Wait 方法结合使用

    概述 当今前端技术迭代速度极快,作为前端开发人员,在需求紧迫的情况下,我们要准确地快速实现所需功能。在实际开发中,使用 Koa2 和 ES7 的 Async/Wait 方法结合起来使用可以更好地实现异...

    1 年前
  • ES9 提供了什么新的方法,你知道吗?

    ES9是ECMAScript标准的第9个版本,它包含了许多新特性和方法,这些新特性和方法可以帮助前端开发者更好地完成任务。在本篇文章中,我们将详细介绍ES9的新方法,为大家提供深入学习和指导意义。

    1 年前
  • 修改 TS 型别审查卡壳问题解决办法

    在前端开发中,我们经常会使用 TypeScript 来开发应用程序。在使用 TypeScript 的过程中,我们可能会遇到型别审查卡壳问题,导致 TypeScript 编译器不能正确地推断变量类型。

    1 年前
  • 如何在 Android 应用程序中实现 Material Design 的下拉刷新效果

    在现代应用程序中,下拉刷新是一项广泛使用的功能,因为它提供了一种简单的方式来刷新应用程序内容并让用户了解新的数据。在 Google 的 Material Design 指南中,下拉刷新也是一项必不可少...

    1 年前
  • 使用 Hapi.js 和 Joi 构建 Web API 的最佳实践

    简介 Hapi.js 是一个 Node.js 的服务器框架,它提供了更直观、更易于使用的 API 来构建 Web 应用程序,因此在 Node.js 社区中广受欢迎。

    1 年前
  • GraphQL 中使用联合类型的优势

    GraphQL 是一种新型的数据查询语言,它是由 Facebook 开源的一种数据查询和操作语言。GraphQL 能够帮助开发者将数据查询和修改操作都统一到一个端点上,适用于前后端分离的应用程序,其具...

    1 年前
  • 一文看懂 ES8 新特性中的异步函数

    随着 JavaScript 语言的发展,异步编程方式愈发重要。ES8 引入了异步函数,这是一个新的标准来简化异步编程的复杂性。异步函数是基于 JavaScript 的 Promise API 构建和设...

    1 年前
  • # Deno 的 TypeScript 支持详解

    Deno 的 TypeScript 支持详解 在前端领域中,Deno 是一个相对较新的 JavaScript 和 TypeScript 运行时环境,由于其具有安全、可靠、可维护和可扩展等优点,因此正在...

    1 年前
  • 深入理解响应式设计

    响应式设计是一种网站设计和开发的方法,它能够根据不同屏幕尺寸和设备类型等因素,自动地改变网页的布局和内容呈现方式,以提供最佳用户体验。 响应式设计的优势 使用响应式设计的网站具有以下几个优势: 适应...

    1 年前
  • Socket.io 实现多人在线答题赛

    Socket.io是一种基于事件驱动的实时网络通信协议,它可以让网站实现实时通信,支持双向通信。通过使用Socket.io,我们可以在浏览器与服务器之间建立实时通信连接,这为制作多人在线游戏以及其他实...

    1 年前
  • 如何在React中优雅地使用ES12新特性

    在React项目中,我们可以使用ES12的部分新特性来提高代码的可读性和减少冗余代码。这些新特性包括:Promise.allSettled()、可选链操作符?.、nullish coalescing操...

    1 年前
  • 详解 ES6 中的迭代器和生成器

    在 ES6 中,迭代器和生成器是两个非常重要的概念。它们可以让 JavaScript 开发者写出更加简洁、易读、易维护的代码。在本文中,我们将详细探讨迭代器和生成器的概念、用法和实例等内容,希望可以帮...

    1 年前
  • RxJS 中的 throttle 操作符使用详解

    RxJS 是一个强大的 JavaScript 库,用于响应式编程。其中的 throttle 操作符被广泛使用,它可以延迟触发事件,在指定时间内只能触发一次,并且可以设置时间间隔。

    1 年前
  • React 单元测试之使用 Enzyme 测试组件

    在前端开发的过程中,为了保证代码的质量和可维护性,我们需要进行单元测试。而对于 React 应用程序的单元测试,除了使用 Jest 和 React Testing Library 以外,还可以使用 E...

    1 年前
  • Webpack4 新特性介绍及使用方法

    Webpack 是一款前端代码打包工具,可以将多个模块的代码打包成一个文件,减少网络请求和提高页面加载速度,同时也有助于代码的组织和管理。Webpack4 是自 2018 年发布的最新版本,其中加入了...

    1 年前
  • Fastify 性能优化之使用 Redis 作为缓存

    作为一名前端开发者,我们经常需要面对性能优化的问题。在性能优化的过程中,缓存是不可忽略的一个方面。本文将介绍如何使用 Redis 作为 Fastify 的缓存,从而提高应用的性能。

    1 年前
  • Vue.js 如何处理跨域请求?

    随着 Web 应用的不断发展,前端开发中经常会遇到跨域请求的问题。跨域请求是指前端应用在访问不同域名或端口的接口时,由于浏览器同源策略的限制,无法直接获取响应结果。

    1 年前
  • ES7之函数式编程

    介绍 ES7中的函数式编程是一种编写代码的风格,它关注代码的函数部分,而忽略了数据在程序中的流动部分。函数式编程本质上是一种声明式的编程方式,它采用属性化的方式来大大简化了代码。

    1 年前
  • # Mongoose 中如何进行数据的增删改查操作

    Mongoose 中如何进行数据的增删改查操作 Mongoose 是 Node.js 中常用的 ORM 框架之一,提供了丰富的 API 可以方便我们进行 MongoDB 数据库的操作。

    1 年前

相关推荐

    暂无文章