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函数