玩转 Vue 3 全家桶
大圣
前百度前端架构师
38321 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 44 讲
玩转 Vue 3 全家桶
15
15
1.0x
00:00/00:00
登录|注册

33 | 编译原理(中):Vue Compiler模块全解析

静态标记
生成代码
优化
语义化分析
调用 baseCompile
参数 options
参数 template
其他函数处理结果分享
transformIf 示例
实战应用
性能提升
代码编译和转化
parse、transform、generate 模块
编译入门知识
创建虚拟 DOM 表达式
生成 render 函数
生成预定义代码模板
创建上下文对象
Vue 语法配置
编译器优化
识别 Vue 语法
遍历 AST 节点
创建上下文对象
generate 函数
transform 函数
解析 template 为 AST
compile 函数
compiler-sfc
compiler-ssr
compiler-core
compiler-dom
transform 函数中的语法处理
Vue 源码中的编译优化
Vue compiler 执行全流程
generate 函数
nodeTransforms 和 directiveTransforms
transform 函数
baseCompile 函数
compiler-dom/index.ts
Vue 3 内部包
思考题
总结
template 到 render 函数的转化
AST 的语义化分析
Vue 浏览器端编译的核心流程
Vue Compiler 入口分析
Vue Compiler 模块全解析

该思维导图由 AI 生成,仅供参考

你好,我是大圣。
上一讲我带你手写了一个迷你的 Vue compiler,还学习了编译原理的基础知识。通过实现这个迷你 Vue compiler,我们知道了 tokenizer 可以用来做语句分析,而 parse 负责生成抽象语法树 AST。然后我们一起分析 AST 中的 Vue 语法,最后通过 generate 函数生成最终的代码。
今天我就带你深入 Vue 的 compiler 源码之中,看看 Vue 内部到底是怎么实现的。有了上一讲编译原理的入门基础,你会对 Compiler 执行全流程有更深的理解。

Vue compiler 入口分析

Vue 3 内部有 4 个和 compiler 相关的包。compiler-dom 和 compiler-core 负责实现浏览器端的编译,这两个包是我们需要深入研究的,compiler-ssr 负责服务器端渲染,我们后面讲 ssr 的时候再研究,compiler-sfc 是编译.vue 单文件组件的,有兴趣的同学可以自行探索。
首先我们进入到 vue-next/packages/compiler-dom/index.ts 文件下,在GitHub上你可以找到下面这段代码。
compiler 函数有两个参数,第一个参数 template,它是我们项目中的模板字符串;第二个参数 options 是编译的配置,内部调用了 baseCompile 函数。我们可以看到,这里的调用关系和 runtime-dom、runtime-core 的关系类似,compiler-dom 负责传入浏览器 Dom 相关的 API,实际编译的 baseCompile 是由 compiler-core 提供的。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入解析了Vue的compiler源码,通过手写迷你Vue compiler的基础知识,引出了tokenizer、parse和generate函数的作用。重点分析了compiler-dom和compiler-core的实现,介绍了baseCompile函数的调用关系和相关参数的作用。通过解析Vue的compiler执行全流程,读者可以更深入地理解Vue的编译原理。 文章中详细介绍了baseCompile函数的核心流程,包括通过baseParse将传递的template解析成AST,transform函数对AST进行语义化分析,以及generate函数生成代码。此外,还介绍了AST的属性和baseParse函数中的createParserContext和createRoot的作用,以及parseChildren函数的逻辑。 在处理节点的parseElement函数中,文章详细介绍了对pre和v-pre标签的判断,以及对自闭合标签的处理。同时,解析节点的parseTag函数的逻辑也得到了详细的阐述,包括属性的解析和对组件的判断。 通过本文的解析,读者可以对Vue的编译器源码有更深入的理解,了解了编译器的执行全流程和相关函数的作用,对编译原理有更深的认识。 总体来说,本文通过对Vue编译器源码的深入解析,帮助读者更好地理解Vue的编译原理,为阅读源码提供了有益的帮助。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《玩转 Vue 3 全家桶》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(7)

  • 最新
  • 精选
  • Little何
    评论越来越少,表示看不懂

    编辑回复: 看不懂的地方可以向老师提问~

    2022-02-16
    3
    3
  • 肥柴
    大圣老师绘制的 Vue 全流程的架构图 超级赞!!!!
    2022-07-22
    2
  • 斜月浮云
    全流程汇总图好评哦👍
    2022-01-06
    1
  • All Fiction
    跟不上了,先听个响,回头慢慢悟
    2023-04-21归属地:安徽
  • 文春伟
    全景图的一步一步更新很赞!
    2022-06-12
  • Hermanyin
    文章说 isVoidTag 判断标签是否是自闭合标签,isVoidTag是判断是否是合法标签把
    2022-04-04
  • 关关君
    advance() advancePositionWithMutation() 这两个函数没怎么理解是干什么的?大圣老师有demo讲解吗?
    2022-02-09
收起评论
显示
设置
留言
7
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部