首页 > 编程知识 正文

html怎么转换成pdf,html外部链接js

时间:2023-05-06 01:15:44 阅读:14743 作者:379

本文介绍了JavaScript抽象语法树。 有一定的参考价值,有需要的朋友可以参考,希望对大家有帮助。

前言

虽然babel现在是大多数项目的必需项目,但其工作方式无法避免生成js分析的过程。 babel有一个引擎babylon,它在早期冻结了项目acron。 在知道这个之前,让我们先看看这个引擎在分析什么样的东西。 不仅是babel,webpack等也在javascript parser中将代码转换为抽象语法树。 该树定义了代码本身,可以通过操作该树准确定位到赋值语句、声明语句和运算语句

什么是抽象语法树

让我们来看一个简单的例子。 var a=1;

var b=a 1;

我们通过这个网站,他是esprima引擎的网站,很好用。 根据流程图,如下所示。

他的json对象格式如下。 {

'类型' : '程序',

' body': [

{

' type': 'VariableDeclaration ',

' declarations': [

{

'类型' : '可变解码器',

' id': {

'类型' : '标识符',

' name': 'a '

(,

' init': {

'类型' : ' literal ',

' value': 1,

' raw': '1'

}

}

]、

' kind': 'var '

(,

{

' type': 'VariableDeclaration ',

' declarations': [

{

'类型' : '可变解码器',

' id': {

'类型' : '标识符',

' name': 'b '

(,

' init': {

' type': 'BinaryExpression ',

'操作者' : ',

' left': {

'类型' : '标识符',

' name': 'a '

(,

' right': {

'类型' : ' literal ',

' value': 1,

' raw': '1'

}

}

}

]、

' kind': 'var '

}

]、

' sourceType': 'script '

}

很多发动机

chrome有v8,firefix有spidermonkey。 另外,常用的发动机有esprima

亚伦

追踪器

UglifyJS2

短整型

以下是几个发动机的速度比较,以及发动机们使用不同框架的加载速度。

我个人认为封装越完美,其实解析时间越长,引擎之间也有acron这个速度越好,babel引擎的前身应该是fork这个项目。

AST的三板斧通过esprima生成AST

通过estraverse遍历和更新AST

在escodegen中将AST重新生成为源代码

举个简单的例子:

创建新的test项目目录

在test工序中安装esprima、estraverse、escodegen的npm模块npmiesprimaestraverseescodegen---- save

3 .在目录下创建新的test.js文件,并加载以下代码: constesprima=require(esprima );

let代码=' const a=1';

constast=es prima.parse script (代码);

控制台. log (ast;

显示输出结果。 脚本{

类型: ' program ',

body:

[可变描述{

类型: ' variable declaration ',

描述: [阵列],

kind: 'const' } ]在、

sourceType: 'script' }

4 .再将以下代码加载到test文件中: constestraverse=require (es traverse );

estraverse.traverse(ast,{

enter :功能(节点) {

node.kind='var ';

}

);

控制台. log (ast;

输出结果: Script {

类型: ' program ',

body:

[可变描述{

类型: ' variable declaration ',

描述: [阵列],

kind: 'var' } ],

sourceType: 'script' }

5 .最后,在test文件中添加以下代码: 上下文编码=请求(es编码);

consttransformcode=es codegen.generate (ast ) ) ) ) )。

控制台. log (transform code;

输出结果: var a=1; 用这把三板斧,我们将const a=1转换为var a=1

是否有babel的感觉0.0

推荐网站

总结

抽象树在前端使用较多,但现在流行的工具无论是webpack还是babel都经过它的三板斧流程。 这里只是粗略地介绍一下,其中会出现抽象树的语法。 有兴趣的人也可以看看esprima的源代码。 为什么是esprima,是因为esprima的资料更多。 因为acron很轻。

本文转载于https://segment fault.com/a/119000012943992

更多web前端开发知识,请访问HTML中文网!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。