npm 包 @inikulin/jsdom-only-external-scripts 使用教程

阅读时长 5 分钟读完

前言

在前端开发中,DOM 操作是必不可少的一部分。而 jsdom 是一个实现了浏览器端的 DOM 操作方式的 Node.js 模块,它提供了一种类似于在浏览器中操作 DOM 的方式,非常适合在 Node.js 环境下进行前端自动化测试、网站爬虫、单元测试等等操作。

然而,jsdom 在默认情况下会下载并执行网页中所有的 JavaScript 代码,这对于想要测试页面效果的 Node.js 应用来说是非常不可取的,因为这意味着测试代码会运行网页上的 JavaScript 代码,导致测试结果不准确。

我们可以使用 @inikulin/jsdom-only-external-scripts 包,使得 jsdom 只加载网页中的外部 JavaScript 文件,从而显著提升 jsdom 的性能并避免运行网页上的 JavaScript 代码。接下来,我们将介绍如何使用 @inikulin/jsdom-only-external-scripts 包。

安装 @inikulin/jsdom-only-external-scripts

在开始使用 @inikulin/jsdom-only-external-scripts 之前,需要先安装 jsdom。

使用以下命令安装 jsdom:

然后,安装 @inikulin/jsdom-only-external-scripts:

使用 @inikulin/jsdom-only-external-scripts

使用 @inikulin/jsdom-only-external-scripts 相对于使用 jsdom 来说,只需要增加一行代码即可。

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

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

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

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

运行上述代码,你会在控制台看到网页的标题。

参数说明

onlyExternalScripts 接受一个回调函数作为参数,回调函数会在 jsdom 完成页面解析后被调用。

onlyExternalScripts 函数还可以传递 jsdom 的可选参数。在上述示例中,我们使用了两个可选参数:

  • resources:用于指定资源,如图片、样式表及 JavaScript 文件等是否需要加载。当值为 "usable" 时,jsdom 会等待资源加载完成后再执行回调函数。
  • runScripts:用于指定是否执行网页中的 JavaScript 代码。当值为 "dangerously" 时会运行网页中的 JavaScript 代码。

示例代码

下面的示例代码演示了如何使用 @inikulin/jsdom-only-external-scripts 来获取网页中的所有外部 JavaScript 文件 URL。

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

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

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

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

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

在上述示例代码中,我们使用 querySelectorAll 方法选择了所有带有 src 属性的 <script> 标签,并获取它们的 src 属性,最后打印到控制台。

总结

使用 @inikulin/jsdom-only-external-scripts 包可以减少 jsdom 的性能消耗,从而使你的 Node.js 应用中的前端自动化测试、网站爬虫、单元测试等操作更加准确,同时也可以避免运行网页中的 JavaScript 代码带来的不必要风险。在实际使用中,我们只需要增加一行代码即可,实现起来非常简单。

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

纠错
反馈