Babel 的编译流程
编译器:将一种语言转换为另外一种语言,一般是高级语言转换为低级语言,高级语言是指具有条件判断、循环、函数、面向对象等一些列的接近人的思维的语言,例如 c++、js。低级语言一般是指汇编语言、机器语言。
一般情况编译器 Compiler 是将高级语言转换为低级语言,而将高级语言装换为高级语言的编译工具叫做转译器 Transpiler 。babel 就是一个 js 的转译器,将 js 转换为 js。
bebel 的编译流程分为三个大步:
- parse:通过解析器 parser 将源码解析为抽象语法树 AST。
- transform:遍历 AST,调用各种 transform 插件对 AST 进行增删改。
- generate:将转换好的 AST 生成目标代码,并生成 sourcemap。
parse
将源码字符串转换为机器能够识别的抽象语法树。这个过程包含词法分析和语法分析。
- 词法分析:将源码字符串转换为词法单元。
- 语法分析:将词法单元转换为 AST。
transform
transform 就是对 parse 阶段生成的 AST 进行处理,遍历 AST 的过程中不同的节点会调用注册的相应的 visitor 函数。visitor 函数会对节点进行增删改查处理,返回新的节点。这样就将一个 AST 转换为一个新的 AST(当然还可以设置是否对新的 AST 进行遍历)。这样遍历完成就是完成了对代码的修改。
generate
generate 阶段就是将 AST 生成目标代码字符串和生成 sourcemap。generate 也是对 AST 进行递归遍历。