15.4 AST 的转换与插件化架构
AST 的转换就是对 AST 做一系列操作、产出新的 AST;它把模板 AST 一步步推向渲染函数的代码。
一、什么是 AST 的转换
- 所谓 AST 的转换,指的是对 AST 进行一系列操作,将其转换为新的 AST 的过程。
- 新的 AST 可以是原语言 / 原 DSL 的描述,也可以是其他语言 / 其他 DSL 的描述。
- 转换后的 AST 用于代码生成——这正是 Vue.js 模板编译器把模板编译为渲染函数的过程。
模板 AST --transform--> JavaScript AST --generate--> 渲染函数代码
二、本节的三个问题
| 小节 | 主题 |
|---|---|
| 15.4.1 节点的访问 | 深度优先遍历访问每个节点;把转换逻辑插件化 |
| 15.4.2 转换上下文与节点操作 | context 共享数据;replaceNode / removeNode |
| 15.4.3 进入与退出 | enter / exit 两阶段,让父节点等到子节点转换完毕 |
相关
- 15.4.1 节点的访问:遍历 AST 并把转换逻辑解耦成插件
- 15.5 将模板 AST 转为 JavaScript AST:转换的实际产物