Babel 原理浅析
- Babel 是什么
- Babel 的作用及常用场景
- Babel 执行过程原理
- Babel的基本原理
- 解析过程
- 插件系统
 
Babel 是什么
官方解释:
Babel是一个JavaScript编译器,也是一个工具链,主要用于将ECMAScript 2015+代码转换为当前和旧版浏览器或环境中向后兼容的JavaScript版本。
Babel 的作用及常用场景
Babel 主要做以下事情:
- 转换语法
- 目标环境中缺少的 Polyfill功能(通过第三方polyfill,例如core-js)
- 源代码转换 (codemods)
Babel 使用场景示例:
- Babel通过语法转换器支持最新版本的- JavaScript。允许你立即使用新语法,而无需等待浏览器支持。
- Babel可以转换- JSX语法。
- Babel可以去掉类型注解。通过- Flow预设 或- TypeScript预设 以开始使用。但- Babel不进行类型检查;你仍然需要安装并使用- Flow或- TypeScript来检查类型。
- Babel可实现压缩,尝试使用尽可能少的代码,而不依赖于庞大的运行时。
可通过
Babel在线编译器查看经过Babel编译后的代码
Babel 在线编译器
Babel 执行过程原理

Babel的基本原理
从上图可看出:
Babel的基本原理是将JavaScript代码解析成抽象语法树(AST),然后再根据配置文件中的规则进行转换。AST是一种将源代码表示为树状结构的数据结构,它能够将代码的结构和含义进行抽象并以对象的形式表示出来。Babel通过解析器将原始的JavaScript代码转换成AST,然后通过遍历这个AST并应用一系列插件来进行代码转换,最后再将转换后的AST重新生成为JavaScript代码。
解析过程
Babel的解析过程可以分为三个步骤:词法分析、语法分析和生成AST。
- 词法分析
 词法分析是将源代码分割成一个个的词法单元,也就是Token。Token可以是关键字、标识符、运算符、分隔符等等。Babel使用了一个名为@babel/parser的解析器来进行词法分析,它会根据一系列的规则将源代码转换成Token流。
- 语法分析
 语法分析是将Token流转换成AST的过程。Babel使用了一个叫做@babel/parser的解析器来进行语法分析,它会根据一系列的语法规则将Token流转换成AST。在这个过程中,解析器会根据语法规则进行语法检查,并生成一棵语法树。
- 生成AST
 生成AST是将Token流转换成AST的最后一步。Babel使用了一个叫做@babel/traverse的工具来遍历AST,并根据一系列的插件规则进行代码转换。在遍历AST的过程中,可以对AST进行修改、删除或新增节点,以实现代码的转换。
插件系统
Babel的插件系统是其强大的功能之一,它允许开发者根据需要添加自定义的转换规则。Babel提供了一些内置的插件,如转换箭头函数、转换类属性、转换模块等等。同时,开发者也可以根据自己的需求编写自定义的插件,并将其添加到Babel的配置文件中。当Babel遍历AST时,它会根据配置文件中的插件规则进行相应的代码转换。



















