快速实现一个自己的mini-vue3

1、项目介绍

1.1 项目概括

👉 项目 github 地址:github.com/XC0703/VueS...

(希望各位看官给本菜鸡的项目点个 star,不胜感激。)

本项目是本人学习 Vue3.0 核心源码的记录,包含 mini-vue3.0 的实现代码以及笔记等形式。参考教学视频:【已完结】全网最详细 Vue3 源码解析!(一行行带你手写 Vue3 源码)

1.2 为什么要做这个项目?

vue3 作为目前最出名的前端开源项目之一,大家除了学会如何使用以外,肯定是想在深入到源码里面,看看这些 nb 的功能到底是如何实现的,或者是增加自己的核心竞争力搞懂原理,面试的时候装个 13。但是当我们打开 vue3 的源码 之后你会发现,代码量是如此之多。这个源码到底该从何读起。虽然 vue3 代码的可读性是很高的,但是架不住代码量大呀!!!但是 vue 火之后,一些优秀的程序员小伙伴秉持着开源拯救世界 的精神,开源了一些项目/文章带大家去了解学习 vue 源码,其中最出名的莫过于崔效瑞老师的mini-vue项目,该项目还受到阮一峰大佬的推荐,不少小伙伴在该项目的指引下去了解学习了 vue 源码。

因此,本项目模仿mini-vue项目,从 0 到 1 实现了一个我自己的mini-vue3.0项目(与崔老师的mini-vue项目相比,少了模版解析编译与单元测试的模块),同时附带一份总字数达 3w+的学习记录笔记,详细地带大家深入理解 vue3 设计原理。

注意:本 mini-vue3 项目还不是很完善,比如缺少核心的模版编译模块与单元测试模块。但是,完整地实现本项目依然可以去了解学习 vue3 的设计思想原理,无论对于完善剩余的模块,还是去看完整的 vue 源码,都可以起到十分重要的帮助。

1.3 实现的功能

  • reactivity

    • reactive(只支持普通对象和 Map、Set 对象的响应式代理)
    • shallowReactive
    • readonly
    • shallowReadonly
    • effect
    • ref
    • toRef
    • toRefs
    • computed
  • runtime-core

    • createAppAPI
    • render(包括首次渲染与 diff 更新)
    • h
    • getCurrentInstance
    • apilifecycle
      • onBeforeMount
      • onMounted
      • onBeforeUpdate
      • onUpdated
  • runtime-dom

    • createApp
    • renderOptionDom(包括节点操作与属性操作)
  • shared

    • 基本的通用工具函数和枚举

因此,该项目基本实现了 vue3.0 的响应式、组件渲染与更新以及生命周期等核心功能。

2、项目开发教程

2.1 项目如何启动?

  1. 先拉取本项目到本地:

    bash 复制代码
    git clone git@github.com:XC0703/VueSouceCodeStudy.git
  2. 用 VScode 等编辑器打开本项目并进入项目:

    bash 复制代码
    cd Vue3.0
  3. 依赖安装

    bash 复制代码
    yarn install
  4. 执行

    bash 复制代码
    npm run build

此时推荐用Live Server 打开Vue3.0\packages\examples下面的任意一个测试 demo 网页,即可以在浏览器看到效果。

2.2 项目整体结构

项目整体采用和 vue3 源码相同的 monorepo 前端项目管理,源码结构、函数名和 vue3 基本一致。

monorepo 介绍:monorepo 是一种将多个 package 放在一个 repo 中的代码管理模式。(每个 package 都有自己的 package.json 文件,比如编译模块的包、响应式模块的包等,相互隔离开来,方便更新修改)

同时项目采用的技术栈与 vue3 源码一致(ts 实现+rollup 打包),但是因为我们的目的只是去搞清楚 vue3.0 的原理,更多的是逻辑方面的实现,像类型强制与边界处理这些细节是要被我们去忽略的。

2.3 项目开发笔记部分

这部分也是该项目的重中之重,因为直接去看代码的话可能会导致一头雾水。仓库中的个人前端学习笔记_Vue3源码解析学习笔记.pdf是本人在实现该项目时的一些笔记:

该笔记总字数达 3w+,清晰地将项目分成十几步去实现,并且每步结束之后都有文字提示找到对应的分支代码(代码注释充分):

这样便使得每次跟着笔记一步步地去实现时,如果遇到问题,可以去源码里面立即定位看看哪里不同。

3、写在最后

3.1 后续计划

3.1.1 完善项目

后续想完善模版编译模块,毕竟现在这个 mini-vue 过于 mini 了,显得不伦不类了。下面是详细的参考教程:

3.1.2 深入源码

做完这个项目,笔者对于 vue3 源码的结构、源码运行流程、模块间的配合算是比较清楚了。由于知识断层已经补充完毕,接下来就可以深入研究 vue3 源码甚至其它 vue 生态库源码的细节,剩下的只能看自己的理解能力。

3.1.3 书籍阅读

关于 vue3 源码讲解的书籍,最出名的莫过于 Vue.js 官方团队成员霍春阳大佬写的一本关于 vue3 源码的书籍 《vue.js 设计与实现》,这本书对 vue3 原理写的非常的详细,满满的干货,可惜笔者目前为止还没有完整看过,后面得定个计划看完,才能 对 vue 原理进一步了解学习。

3.2 总结

在学习完成之后一定要记得反复反复地看自己实现的 mini-vue ,不然你就会发现你学了这个模块忘了那个模块,这样得不偿失。同时学习过程中,笔记一定要跟上,以便以后复习。

上面便是本人学习 vue3 源码的一些记录,没什么创新性的东西,只是一份记录,提供给大家学习的思路,请各位小伙伴多多支持。由于笔者语言描述能力不是太强,文章或者笔记有错误请多批评指正。

✨ 本人掘金博客地址:www.xucong.zone

🎨 github 主页地址:github.com/XC0703

🏰 gitee 主页地址:gitee.com/fish-in-jia...

上面是一些笔者技术社区主页的地址,欢迎各位看官给小弟点个赞,与诸君共勉。

相关推荐
贩卖纯净水.3 分钟前
Chrome调试工具(查看CSS属性)
前端·chrome
栈老师不回家1 小时前
Vue 计算属性和监听器
前端·javascript·vue.js
前端啊龙1 小时前
用vue3封装丶高仿element-plus里面的日期联级选择器,日期选择器
前端·javascript·vue.js
一颗松鼠1 小时前
JavaScript 闭包是什么?简单到看完就理解!
开发语言·前端·javascript·ecmascript
小远yyds1 小时前
前端Web用户 token 持久化
开发语言·前端·javascript·vue.js
程序媛小果2 小时前
基于java+SpringBoot+Vue的宠物咖啡馆平台设计与实现
java·vue.js·spring boot
小光学长2 小时前
基于vue框架的的流浪宠物救助系统25128(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
数据库·vue.js·宠物
吕彬-前端2 小时前
使用vite+react+ts+Ant Design开发后台管理项目(五)
前端·javascript·react.js
学前端的小朱2 小时前
Redux的简介及其在React中的应用
前端·javascript·react.js·redux·store
guai_guai_guai3 小时前
uniapp
前端·javascript·vue.js·uni-app