lhlGitHub / trisome

前端大厂进攻学习资料库
21 stars 1 forks source link

Babel的原理是什么? #41

Open lhlGitHub opened 2 years ago

CheeseLeee commented 2 years ago

词法分析--》生存tokens数组--》AST树---》访问节点---》修改节点---》新AST树

zhangqiang0821 commented 2 years ago

1、解析Parse:将代码解析生成抽象语法树(即AST),即词法分析与语法分析的过程 2、转换Transform:对于AST进行变换一系列的操作,babel接收得到AST并通过babel-traverse对其进行遍历,在此过程中进行添加、更新及移除等操作 3、生成Generate:将变换后的AST再转换为JS代码,使用到的模块是babel-genertor

Moannas commented 2 years ago

Babel 是一个 JavaScript 编译器,用于将 ECMAScript 2015+ 版本的代码转换为向后兼容的 JavaScript 语法,以便能够运行在当前版本和旧版本的浏览器或其他环境中。简单来说 Babel 的工作就是:

loringray commented 2 years ago

1.解析 将代码解析成抽象语法树(AST),每个 js 引擎(比如Chrome浏览器中的V8引擎)都有自己的AST解析器,而Babel是通过[Babylon]实现的。在解析过程中有两个阶段:词法分析和语法分析,词法分析阶段把字符串形式的代码转换为令牌(tokens)流,令牌类似于AST中节点;而语法分析阶段则会把一个令牌流转换成 AST的形式,同时这个阶段会把令牌中的信息转换成AST的表述结构。

  1. 转换 在这个阶段,Babel 接受得到 AST 并通过 babel-traverse 对其进行深度优先遍历,在此过程中对节点进行添加、更新及移除操作。这部分也是Babel插件介入工作的部分。
  2. 生成 将经过转换的 AST 通过 babel-generator 再转换成js代码,过程就是深度优先遍历整个AST,然后构建可以表示转换后代码的字符串。