npm 包 webpack-extract-subresource-integrity 使用教程

阅读时长 7 分钟读完

Webpack 是前端开发中常用的打包工具,它可以将多个 JavaScript、CSS、图片等文件打包成一个或多个文件,并实现代码优化、文件压缩等功能。但是在使用 Webpack 打包时,由于各个资源之间的依赖关系以及资源的引用方式不同,会出现如下几个问题:

  • 外部资源(如 CDN 资源)无法被自动处理,需要手动处理资源引用路径,以及添加 subresource integrity(SRI)等属性。
  • 在某些情况下,我们希望将某些资源直接引入 HTML 中,而不是打包到 js 文件中,如字体文件。
  • 当我们使用 Webpack 打包多个应用时,公共依赖如果被打包多次会造成无谓的代码冗余。

针对这些问题,我们可以使用 webpack-extract-subresource-integrity 这个 npm 包来解决。

什么是 webpack-extract-subresource-integrity

webpack-extract-subresource-integrity 是一个 Webpack 插件,可以将 Webpack 打包生成的 JavaScript、CSS 等资源文件中的外部资源(如 CDN 资源)转为本地文件,并添加 subresource integrity(SRI)等属性。它的主要特点包括:

  • 可以自动处理并替换 js 文件中的外部资源引用路径,并在 HTML 中添加 SRI 属性。
  • 可以将某些文件(如字体、图标)直接引入到 HTML 中,而不是打包到 js 文件中,以加快页面加载速度和减少应用的大小。
  • 能够去除重复的依赖项,减少应用代码的冗余。

如何使用 webpack-extract-subresource-integrity

下面我们将演示如何使用 webpack-extract-subresource-integrity 这个 npm 包,将 project1 和 project2 两个应用的公共依赖打包成一个文件,并将字体引入 HTML 中。

安装

首先需要对 webpack-extract-subresource-integrity 进行安装

配置

在 Webpack 配置文件中,需要添加 webpack-extract-subresource-integrity 插件。具体配置如下:

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

这里的主要配置项包括:

  • enableCssIntegrity:是否启用对 CSS 的 SRI 属性处理。
  • enableJsIntegrity:是否启用对 JavaScript 的 SRI 属性处理。
  • enableFontIntegrity:是否启用对字体的处理,将其 inline 到 HTML 中。
  • enableIconIntegrity:是否启用对图标的处理,将其 inline 到 HTML 中。
  • removeDuplicateDependencies:是否启用去重功能,去除多个应用中的可能重复的共享依赖。
  • fileNames:生成的文件名模板。
  • fontInlineLimit:字体文件 inline 的最大大小,超过这个大小的将被打包到 js 文件中。

示例代码

接下来我们将根据上面的配置文件打包 project1 和 project2 两个应用,示例代码如下:

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

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

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

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

上面的示例代码中,我们在 project1 和 project2 中引入了 lodash-es 依赖,它们位于 node_modules 目录中。而我们的 Webpack 配置文件指定了将这些依赖打包到 'common.js' 文件中,因此我们可以看到打包生成的文件如下:

其中 common.js 为包含 lodash-es 依赖的公共依赖文件。我们使用 Webpack 生成的 HTML 文件如下:

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

在生成的 HTML 文件中,我们可以看到 common.js 文件被添加了 subresource integrity(SRI)属性,而字体文件则被 inline 到了 HTML 中。

总结

在实际的开发中,我们经常需要使用 Webpack 进行应用的打包。然而,由于应用之间存在较多的依赖关系以及资源引用方式不同等原因,会导致一些问题的出现,如外部资源无法自动处理、字体文件过多、公共依赖冗余等问题。本文我们介绍了 webpack-extract-subresource-integrity 这个 npm 包的使用方法,可以自动解决上述问题,并生成更加优化的应用。

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

纠错
反馈