mini-vue 0 vue 3 模块之间的依赖关系
概览
vue 3 采用 monorepo 的形式组织代码,所有的模块都在 packages 目录下。
包与包之间的依赖关系明确, 依赖关系如下:

@vue/complier-sfc是用来解析单文件组件(Single File Component)- 编译和运行时分别对应
runtime模块和compiler模块runtime-dom和runtime-core解耦complier-dom和complier-core解耦- 这使得 vue 可是不局限于 DOM 平台,可以渲染在其他平台, 例如 canvas
- 响应式在
reactivity模块中实现且不依赖其他包,可以独立使用
总的来说,vue 可以大致的分为三块:
- Reactivity Module
让我们可以创建响应式对象 - Compiler Module
把模板文件转换成 render 函数(可以在浏览器的运行时执行,也可以在构建项目的时候执行) - Renderer Moudle
可以大致分为三个阶段:
- Render 阶段:
render function –> 虚拟 DOM 节点 - Mount 阶段:
虚拟 DOM –>生成 DOM 节点,在网页上显示出来 - Patch 阶段:
比较新旧虚拟 DOM 节点,更新变化的部分
整体流程
首先我们有 template,其中我们可能会使用一些响应式的对象。然后我们把会将模板转换为render function。render function 会创建虚拟 DOM,通过虚拟 DOM 创建真实的DOM 节点。如果响应式对象发生改变就会生成新的虚拟 DOM,比较新旧虚拟 DOM,在真实DOM 上对需要更新的部分进行更新。