npm 包 esprimaq 使用教程

阅读时长 7 分钟读完

介绍

ESprima是一个用JavaScript编写的ECMAScript解析器,其目标是支持ECMAScript 5.1+。esprimaq则是对于Esprima做了进一步扩展的版本,主要增加了诸如支持newline-tolerant indentations,propagating parenthesis, auto semicolon insertion等功能。

本文主要介绍如何在前端开发中使用npm包esprimaq以及如何应用其相关功能。

安装

使用npm安装即可:

用法

解析JavaScript代码

esprimaq.parse()方法可以解析JavaScript代码并生成AST(Abstract Syntax Tree)对象。

解析出来的ast可以方便我们进行静态代码分析或者生成代码等操作。

处理newline-tolerant indentations

esprimaq会自动处理newline-tolerant indentations,我们可以使用其中的源代码:

输出为:

代码中if、==、左右括号之间的空行被略过了。看到的输出应该是这样的:

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

处理propagating parenthesis

ESprimaQ会自动处理propagating parenthesis:

解析出来的AST对象:

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

处理auto semicolon insertion

esprimaq可以处理auto semicolon insertion:

解析出来的AST对象:

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

这便是auto semicolon insertion的奇妙,逐一分析代码后我们会发现,console.log(x)之前是没有分号的。但是在解释js时,auto semicolon insertion会将需要分号的地方自动加上分号,最终解析器的输出也有分号。

总结

esprimaq是ESprima的扩展版本,增加了newline-tolerant indentations, propagating parenthesis, auto semicolon insertion等功能。在前端开发中,我们可以使用esprimaq解析代码,并进行处理,充分发掘esprimaq的功能,优化代码的编写,提高代码质量。

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

纠错
反馈