vue -- @vue/compiler-core整体逻辑
Published:
·
LastMod: May 15, 2023
·
984 words
vue @vue/compiler-core整体逻辑 🔗
“version”: “3.3.2”
@vue/compiler-core主要处理的是@vue/compiler-sfc模版部分,最终处理成render函数
其中主要对外暴露的有以下几个api
- baseCompile
- baseParse
- transform
- generate
baseParse 🔗
baseParse主要处理是sfc中模版的部分(html部分),我们在写模版部分的时候,会写很多插值、指令、组件等等之类的
baseParse处理之后的结果是把模版处理成ast对象
比如
| |
会处理成
| |
type
其中每个节点Node都会有个type,type的不同代表不同的类型
每个类型最终在生成代码时,会进行不同的操作
loc
代表当前字符在原字符中的位置
节点类型 🔗
内置以下不同的节点类型
| |
transform 🔗
transform的主要作用就是转化ast中我们写的一些特殊的语法,比如说 v-for、v-if、slot等等
这里传入的是上面编译过后的ast
第二个参数是系统内置的一些转换器和指令转换器
| |
包括以下内置转换器
| |
对ast的操作其实就是递归处理, 根据上面compile的结果,每个节点其实都有不同的type,识别出不同的type,就可以对ast对象进行处理
编译的主要核心就是在transform这一块,这一块可以对最终生成的模板进行定制
generate 🔗
generate就是生成的意思
这里传入上面处理transform过的ast结果
| |
这里就是生成对应的render函数代码
| |
genNode 🔗
会进行递归调用,组装改节点类型的type,最终拼装成render执行的js函数
baseCompile 🔗
baseCompile就是一个组装函数,内部执行了上面3个函数
- baseParse
- transform
- generate
最终返回编译后的render函数