webpack 中的 chunk 和 bundle 有何区别和作用?

阅读时长 5 分钟读完

介绍

Webpack 是一款现代化的打包工具,它支持将多个独立的 JavaScript 文件打包成一个或多个 bundle 文件。但是,在实际的开发中可能需要将 bundle 文件进一步切割成更小的文件块,这些小文件块就被称作 chunk。本文将详细介绍 chunk 和 bundle 的区别、作用和如何使用它们。

区别

  • Bundle: 一个 bundle 是由 webpack 打包生成的一个文件。一个 bundle 文件包含了所有被 webpack 处理过的模块和它们之间的依赖关系图,可以被直接在浏览器中访问运行。

  • Chunk: chunk 也是 webpack 打包过程中的生成物之一。在 webpack 中,“chunk”这个术语是一个工作状态,webpack 核心(包括 loader 和 plugin)的理论依据是操作 chunk 而非 bundle。在打包过程中,webpack 将会把多个模块打包成一个或多个 chunk。它们可以是同步(被直接引入的模块),也可以是异步(按需加载的模块)生成的。

作用

Bundle 的作用

  • 将多个模块中的代码合并成一个文件,避免了多个文件同时请求而带来的网络开销。

  • 对于开发者来说,可以用 ES6 模块化的形式写代码,提高代码复用性和可读性。

Chunk 的作用

  • 在实际项目中,chunk 的引入可以将项目功能模块化,实现按需加载。按需加载可以有效的提升网页加载速度和用户体验。

  • 可以将一些通用的代码提取到公共chunk中,避免了代码冗余,也方便了代码的维护以及扩展。比如,将多个页面都用到的底层库(jquery、axios、lodash等)提取到公共chunk中。

如何使用

在 webpack 中,chunk 可以通过使用以下两个插件进行配置。

1. SplitChunksPlugin

SplitChunksPlugin 可以将我们在项目中同步引入的模块分离到单独的 chunk 中。这些 chunk 可以被在后续的页面中重复利用。通常用来提取公共代码块和第三方库。

可以使用以下配置进行使用。

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

上面的配置将会将 node_modules 中的所有代码提取到 vendors chunk 中,并将 jquery 提取到单独的一个 jquery chunk 中。

2. MiniCssExtractPlugin

该插件可以将项目中使用到的 css 文件提取到单独的文件中进行打包,提高网页渲染速度以及实现缓存。

可以使用以下配置进行使用。

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

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

上面的配置可以将 .css 文件提取到单独的文件中。

结论

Webpack中,chunk 和 bundle 是两个不同的概念,chunk 的引入可以实现代码的模块化、按需加载,提高代码效率和减少代码冗余。在实际项目中,可以使用 SplitChunksPlugin、MiniCssExtractPlugin 等已经打包好的插件进行 chunk 的引入和实践。

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

纠错
反馈