Babel 的编译流程

编译器:将一种语言转换为另外一种语言,一般是高级语言转换为低级语言,高级语言是指具有条件判断、循环、函数、面向对象等一些列的接近人的思维的语言,例如 c++、js。低级语言一般是指汇编语言、机器语言。

一般情况编译器 Compiler 是将高级语言转换为低级语言,而将高级语言装换为高级语言的编译工具叫做转译器 Transpiler 。babel 就是一个 js 的转译器,将 js 转换为 js。

bebel 的编译流程分为三个大步:

  1. parse:通过解析器 parser 将源码解析为抽象语法树 AST。
  2. transform:遍历 AST,调用各种 transform 插件对 AST 进行增删改
  3. generate:将转换好的 AST 生成目标代码,并生成 sourcemap。

Babel 编译流程 - 图1

parse

将源码字符串转换为机器能够识别的抽象语法树。这个过程包含词法分析和语法分析。

  1. 词法分析:将源码字符串转换为词法单元。
  2. 语法分析:将词法单元转换为 AST。

Babel 编译流程 - 图2

transform

transform 就是对 parse 阶段生成的 AST 进行处理,遍历 AST 的过程中不同的节点会调用注册的相应的 visitor 函数。visitor 函数会对节点进行增删改查处理,返回新的节点。这样就将一个 AST 转换为一个新的 AST(当然还可以设置是否对新的 AST 进行遍历)。这样遍历完成就是完成了对代码的修改。
Babel 编译流程 - 图3

generate

generate 阶段就是将 AST 生成目标代码字符串和生成 sourcemap。generate 也是对 AST 进行递归遍历。
Babel 编译流程 - 图4