webpack5 特性介绍以及升级与优化?

阅读时长 6 分钟读完

随着前端项目的不断发展,前端工程化已成为必不可少的一环。而 webpack 作为前端工程化时代的代表性工具,一直在不断的演进和进化。在 2020 年 10 月份,webpack 5 正式发布,相较于之前的版本带来了诸多的新功能和特性。

在本文中,我们将一一介绍 webpack 5 的特性,并提供升级和优化建议,让你更好的了解如何使用 webpack 5 来构建和优化你的前端项目。

webpack 5 的新特性

模块联邦

模块联邦是 webpack 5 最重要的新特性之一,可以同时加载多个独立的 webpack 构建,并在运行时共享模块。这意味着你可以在不同的团队间共享代码,或是将不同的应用组合在一起,构建出更加复杂的系统。

实现模块联邦基于微前端的理念,不同的应用可以独立运行,并在需要的时候动态地加载其他应用的代码,从而达到代码复用和快速构建应用的目的。

使用模块联邦需要设置一个共享模块规则,并将其暴露出来,指定哪些模块可以被动态加载。如下例子:

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

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

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

Tree Shaking 更加智能

在 webpack 5 中, Tree Shaking 精度得到了提升,更准确的排除了无用的代码。webpack 5 可以在编译时分析代码依赖关系,更好的处理动态导入和其它情况下的 Tree Shaking。

同时,webpack 5 新增了 sideEffects 属性,用于标记无副作用的代码并且告诉 webpack 可以安全的进行 Tree Shaking,这样就可以排除一些无用的代码,提升应用的加载速度。

支持原生 ES 模块

webpack 5 开始支持原生的 ES 模块语法,这意味着你可以在项目中直接使用 import 和 export 关键字来进行模块化开发,不需要转换成 CommonJS 或其他的模块语法。

相比之前,原生 ES 模块可以提供更好的性能和可读性。webpack 5 会自动处理这些模块并且放入 Graoh 中作为入口点的其中之一,不需要进行明确的入口声明。

自动刷新速度提升

webpack-dev-server 环境下,webpack 5 改进了刷新速度,因为之前的版本需要先完全编译一遍代码,然后再将编译后的代码输出到浏览器上,有一定的延迟。而从 webpack 5 开始,你可以通过实验性的实现 webpack-dev-server --no-live-reload 选项来禁用 live reload。

缩小构建的体积

webpack 5 可以通过多种方式来压缩最终的输出文件。通过设置mode属性可以指定环境的情况来开启压缩文件的处理。使用 TerserWebpackPlugin、OptimizeCssAssetsWebpackPlugin 以及 HtmlWebpackPlugin 也可以处理额外的优化步骤。

升级 & 优化建议

为了更好的使用 webpack 5,你需要考虑升级和优化你的现有代码。

升级

升级到 webpack 5 不是无风险的,需要确保升级前做了充分的测试,以免出现兼容性问题。

将 webpack 5 与其他工具升级,例如 webpack-dev-server 和 webpack-cli,以确保最新的版本兼容性。

在升级之前,请考虑移除已经弃用的配置选项,例如以下几个:

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

在升级过程中,可以使用 webpack-climigrate 子命令转换旧的 webpack 配置。

优化

升级完成之后,还需要进行一些优化。

使用 Tree Shaking 和代码分割技术,尽量充分利用 webpack 5 的新特性,将没有用到的代码剔除出去。

合理地使用模块联邦,可以大大节省代码量,并提高应用性能。

使用原生的 ES 模块语法,可以提高代码的可读性,并充分利用 webpack 5 的优化特性。

在提高体积方面,优先使用轻量的第三方库以及使用 gzip 压缩等技术,以降低文件的大小。同时,升级到 webpack 5 可以使用新功能在构建时间上实现更多的优化,例如使用多进程编译等方式。

结论

webpack 5 带来的新特性和优化使得前端工程化的开发过程更加简单和高效。在了解了 webpack5 的新特性和优化之后,你可以尝试升级你的现有项目并应用这些新特性和优化方法。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/674a8920a1ce0063549373d1

纠错
反馈