项目简介
本项目是基于 Vue 3 框架构建的学习项目,旨在助力开发者深入掌握 Vue 3 的核心原理与实现机制。项目借助多个核心包(complier、runtime-dom、runtime-core、reactivity)达成了 Vue 响应式驱动 UI 的功能。其中,complier 负责把 template 编译成 render 函数,runtime-dom 用于将 vnode 挂载到页面,runtime-core 关联数据和 DOM,reactivity 实现数据的响应式。
项目的主要特性和功能
主要特性
- 模块化设计:将编译、运行时、DOM 渲染等功能分离,高度模块化,部分模块可独立运行,例如 complier 能脱离 Vue 运行时,便于打包工具提前编译 template。
- 响应式系统:通过 reactivity 包实现数据响应式,支持 reactive、ref、computed 等响应式数据类型,具备 effect 依赖收集和触发机制。
- 虚拟 DOM 和 Diff 算法:runtime-core 包实现虚拟 DOM 的创建与更新,采用双端 Diff 算法高效对比新旧 vnode,提升性能。
- 组件化开发:支持组件的创建、挂载、更新等操作,可处理组件的 props、emit、slot 等特性。
- 自定义渲染:可将 DOM 渲染替换为自定义渲染方式,如渲染到 canvas。
主要功能
- 响应式数据处理:支持对象和基础数据类型的响应式处理,提供只读和浅只读数据类型。
- 模板编译:把 template 字符串编译成 render 函数,包含解析、转换和生成代码的过程。
- 组件生命周期管理:处理组件的创建、挂载、更新和销毁过程。
- 事件处理:支持事件注册和自定义事件的触发。
- 跨层级数据传递:通过 provide 和 inject 实现跨层级的数据传递。
- 异步更新:使用 nextTick 实现异步更新,避免多次数据修改导致的性能问题。
安装使用步骤
前提条件
假设用户已下载本项目的源码文件,且已安装 Node.js 和 pnpm。
安装依赖
- 在项目根目录创建
pnpm-workspace.yaml
文件。 - 每个包都需要一个
package.json
,执行pnpm init -y
初始化。 - 执行项目安装:
pnpm i @miao-vue/shared --filter @miao-vue/reactivity
。 - 修改
tsconfig.json
的paths
。 - 在根目录安装开发依赖:
pnpm i vitest -D -w
。
运行项目
执行相应的打包命令(如使用 rollup)进行项目打包,然后在浏览器中打开相应的 HTML 文件查看效果。具体命令可参考项目中的 package.json
中的 scripts
字段。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】