Babel的运行原理

2020-11-30 18:08:58 浏览数 (1)

1.解析

  • 接收代码并输出 AST。 这个步骤分为两个阶段:词法分析(Lexical Analysis) 和 语法分析(Syntactic Analysis)。
  • 词法分析阶段把字符串形式的代码转换为 令牌(tokens) 流。
  • 语法分析阶段会把一个令牌流转换成 AST 的形式。 这个阶段会使用令牌中的信息把它们转换成一个 AST 的表述结构,这样更易于后续的操作。

Babel 使用 @babel/parser 解析代码,输入的 js 代码字符串根据 ESTree 规范生成 AST(抽象语法树)

code(字符串形式代码) -> tokens(令牌流) -> AST(抽象语法树)

2.转换

  • 接收 AST 并对其进行遍历,在此过程中对节点进行添加、更新及移除等操作。
  • Babel提供了@babel/traverse(遍历)方法维护这AST树的整体状态,并且可完成对其的替换,删除或者增加节点,这个方法的参数为原始AST和自定义的转换规则,返回结果为转换后的AST。

3.生成

  • 把最终(经过一系列转换之后)的 AST 转换成字符串形式的代码,同时还会创建源码映射(source maps)。
  • Babel使用 @babel/generator 将修改后的 AST 转换成代码,生成过程可以对是否压缩以及是否删除注释等进行配置,并且支持 sourceMap。

0 人点赞