前言
在学习es6的时候就一直希望了解一下bable的转码原理,偶然的机会查了查,整理了一下。
Bable的主要工作原理
Bable是一个转译器,与编译器不同。bable主要负责目标代码的版本转换,只处理同一种语言,并且只负责输出转码后的代码串。大概分三个阶段:
- parsing 生成AST抽象语法树(将整个代码字符串分割成语法单元 ,进行语义分析,在分词结果的基础之上分析语法单元之间的关系)
- transforming 修改语法树,生成新的语法树
- generating 根据新的语法树生成目标代码
Babel主要由几个核心包组成
- babel-core:babel转译器本身,提供了babel的转译API。webpack的babel-loader就是调用这些API来完成转译过程。
- babylon:js的词法解析器
- babel-traverse:用于对AST的遍历,主要给plugin用
- babel-generator:根据AST生成代码
Bable核心概念
-
plugins
主要在第二阶段transforming,修改AST树,生成新的语法树时使用。bable会根据配置的plugins进行AST的修改。 -
presets