本篇内容主要讲解“前端要知道的AST知识有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“前端要知道的AST知识有哪些”吧!定义:在计算机科学中,抽象语法树是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。之所以说语法是“抽象”的,是因为这里的语法并不会表示出真实语法中出现的每个细节。从定义中我们只需要知道一件事就行,那就是 AST 是一种树形结构,并且是某种代码的一种抽象表示。estree 就是 es 语法对应的标准 AST,作为一个前端也比较方便理解。我们以官方文档为例https://github.com/estree/estree/blob/master/es5.md下面看一个代码AST 为看两个稍微复杂的代码由 JavaScript 编写的 JavaScript 解析器,类似的解析器还有很多,比如Esprima[3]和Shift[4],关于他们的性能,Esprima 的官网给了个测试地址[5],但是由于 acron 免费云主机域名代码比较精简,且 webpack 和 eslint 都依赖 acorn,因此我们这次从 acorn 下手,了解如何使用 AST。acorn 的操作很简单这样我们就能拿到代码的 ast 了,options 的定义如下ecmaVersion ECMA 版本,默认时 es7locations 默认为 false,设置为 true 时节点会携带一个 loc 对象来表示当前开始与结束的行数。onComment 回调函数,每当代码执行到注释的时候都会触发,可以获取当前的注释内容获得 ast 之后我们想还原之前的函数怎么办,这里可以使用astring[6]接下来我们就可以利用 AST 来实现一些字符串匹配不太容易实现的操作,比如将普通函数转化为箭头函数。我们先来看两个函数的AST有什么区别找到区别之后我们就可以有大致的思路找到FunctionDeclaration
将其替换为VariableDeclaration
VariableDeclarator
节点在VariableDeclarator
节点的init
属性下新建ArrowFunctionExpression
节点并将FunctionDeclaration
节点的相关属性替换到ArrowFunctionExpression
上即可但是由于 acorn 处理的 ast 只是单纯的对象,并不具备类似 dom 节点之类的对节点的操作能力,如果需要操作节点,需要写很多工具函数, 所以我这里就简单写一下。结果如下如果想要代码更加健壮,可以使用recast[7],提供了对 ast 的各种操作这里只是示例代码,展示 recast 的一些操作,最好的情况还是能遍历节点自动替换。这样我们就完成了将普通函数转换成箭头函数的操作,但 ast 的作用不止于此,作为一个前端在工作中可能涉及 ast 的地方,就是自定义 eslint 、 stylelint 等插件。到此,相信大家对“前端要知道的AST知识有哪些”有了更深的了解,不妨来实际操作一番吧!这里是百云主机网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
相关推荐: Java Class加密工具ClassFinal怎么使用
本篇内容主要讲解“JavaClass加密工具ClassFinal怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaClass加密工具ClassFinal怎么使用”吧!ClassFinal 是一款 jav…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。