Q: 请描述 Babel 的完整编译过程?分为哪几个阶段?
Babel 的核心工作原理分为三个阶段:Parsing (解析)、Transformation (转换)、Code Generation (代码生成)。
Task: 读入源代码 (String),转换为 AST (Abstract Syntax Tree)。 这个过程又分为两步:
const a = 1; 被分割为 const, a, =, 1。Task: 遍历 AST 树,调用配置的 Plugins 对节点进行 增/删/改。
这是 Babel 最核心、最复杂的部分。Babel 本身并不直接转换代码,而是提供了一个 Visitor (访问者) 模式 的接口。各种 Plugin (如 @babel/plugin-transform-arrow-functions) 通过实现 Visitor,监听特定类型的 AST 节点 (如 ArrowFunctionExpression),并对其进行替换 (比如改成普通的 FunctionExpression)。
Task: 将转换后的 AST 树,重新转换回 源代码字符串,同时生成 Source Map。 这一步是深度优先遍历 (DFS) AST,根据节点类型拼接代码。
是的,Babel 本质上是一个 源到源编译器 (Source-to-Source Compiler),通常被称为 Transpiler (转译器)。它不生成机器码,而是生成另一种高级语言 (JS ES5)。