抽象语法树 AST
webpack 和 Lint 等很多工具和库的核心都是通过Abstract Syntax Tree来实现对代码的检查 分析等操作的
通过抽象语法树这个概念 你也可以随手编写一些类似的工具
抽象语法树的用途
- 代码语法的检查 代码风格的检查 代码高亮 代码格式化 代码错误提示 代码自动补全等
- 代码混淆压缩
- 优化变更代码 改变代码结构是达到想要的结构
- 代码打包工具 webpack rollup等
- commonjs amd cmd 等代码规范的转化
- typescript jsx 等转化为javascript
抽象语法树的定义
这些工具通过javascript parser 把代码转化成一颗抽象语法树, 这棵树定义了代码的结构,通过曹总这棵树,我们可以精确的定位到声明语句,赋值语句,运算语句等, 实现对代码的分析 优化 变更等操作
Javascript Parser
- javascript parser 会把js源码转化为抽象语法树的解释器
- 浏览器会把js源码通过解析器转化为抽象语法树,在进一步转化为字节码 或者是 机器码
- 一般来说每个js引擎都会有自己抽象语法树格式
比较常用的解析器 exprima
- 通过esprima把源码转化为AST
- 通过estraverse遍历并更新AST
- 通过escodegen将AST重新生成源码
- astexplorerAST的可视化工具
