author:gaocc time: 2022-11-17
多功能的 JavaScript 编译器。此外它还拥有众多模块可用于不同形式的静态分析。
静态分析是在不需要执行代码的前提下对代码进行分析的处理过程。静态分析的目的是多种多样的, 它可用于语法检查,编译,代码高亮,代码转换,优化,压缩等等场景。
浏览器编译你的js代码,需要把js转化成ast。2015年es6语法发布,但浏览器还普遍不支持es6语法。于是催生出babel模块,默认支持js到ast的转化,并通过修改ast,将es6的特性代码转化为同效用的es5代码,同时也提供了ast的操作函数。
Babel操作流程:js代码 -> 原AST -> babel处理 -> 修改后的AST -> 修改后的js代码 -> 交给浏览器编译
即: 解析(parse),转换(transform),生成(generate)
实现上述功能的插件见小节:Babel API
Babel 更确切地说是源码到源码的编译器,通常也叫做“转换编译器(transpiler)”。 意思是说你为 Babel 提供一些 js代码,Babel 更改这些代码,然后返回给你新生成的js代码。
由于babel提供了操作AST的函数,所以开发者可以由此做各种各样的静态分析。
常见编译型语言(例如:Java)编译程序一般步骤分为:词法分析->语法分析->语义检查->代码优化和字节码生成。具体的编译流程如下图:
js的AST生成和java略有不同,java是走上图所有流程,通过本地jdk将.java文件编译成.class后缀的文件,然后交给jvm(虚拟机)处理。js默认是通过浏览器编译,流程到上图的语义检查器为止,生成最终的AST