vue3 compile

536 阅读1分钟

vue3的compile分为四个部分:

compiler-core
compiler-dom // 浏览器
compiler-sfc // 单文件组件
compiler-ssr // 服务端渲染

其中,compiler-core是编译的核心模块,是平台无关的。packages/compiler-core/src/compile.ts文件中导出baseCompile方法,其他三个都是根据不同的平台和使用场景做了适配,传入各自的options扩展了baseCompile方法。

baseCompile

可以看到,baseCompile也遵循parse、transtrom、 codegen的过程。

  1. 先是一些环境的准备和判断:浏览器中,prefixIdentifiers应为falsemodefunctioncacheHandlers需要开启prefixIdentifiersfunction模式不允许有scopeId

  2. 如果模板是string类型,调用baseParse将模板转化为ast

  3. 调用getBaseTransformPreset得到nodeTransformsdirectiveTransforms,里边包含了对v-ifv-forv-onv-bindv-model等的处理方法

  4. nodeTransforms和directiveTransforms合并用户自定义方法options.nodeTransforms和options.directiveTransforms后,将ast和合并后的参数传给transform方法,对ast进行转换,对不同的结点添加不同的选项参数,供generate使用

  5. generate

Vue3 模板编译原理 这篇文章写的比较浅显易懂,结合具体的示例,没有太多复杂的源码。如果不想阅读冗长的源码,可以看一下~

如果想看源码的话,这几篇文章对每个部分做了解读,同时也欢迎留言纠错补充~

www.cnblogs.com/woai3c/p/13…