Vue 源码学习开篇!

简介: Vue 源码学习开篇!

网络异常,图片无法展示
|


「这是我参与2022首次更文挑战的第3天,活动详情查看:2022首次更文挑战


前置内容


为什么学 Vue 源码?


  1. 工作中装比
  2. 应付面试
  3. 加深对 Vue 的理解
  4. 增强解决问题的能力
  5. 增强阅读源码的能力


如何避免陷入源码的海洋?


找到一条主线


比如写上一段简单地 vue3 代码,接下来思考如何跑起来的?


  1. createApp
  2. app.mount()
  3. 数据什么时候发生了改变
  4. 页面如何更新的

......


从主线发散分支


当主线学习完成后,还有很多其他的分支问题,细节问题没有搞懂,这个时候,我们就需要从主线发散新的问题,带着问题去源码中找答案。


造轮子


当我们把 vue3 的源码基本梳理完成后,就可以尝试写一个 mini-vue 了,在这个过程中,大概率还会遇到新的问题,再去尝试解决,当我们把 mini-vue 写出来之后,就形成了一个完整的输出。这个过程,会把之前学习的知识点系统的串联在一起,形成一个完成的体系。


费曼学习法


当我们尝试把学到的知识讲给别人的时候,过程中就会发现有的问题好像理解的还不够透彻,有些点之间的衔接好像没有那么丝滑。


所以这个过程会倒逼我们继续巩固之前不扎实,没搞透的点,当我们可以把相关的知识完整的转述给他人的话,就说明是真的学到了。


同时这样一个做输出的过程,也会帮助到需要相关知识的小伙伴,既帮助了他人,同时他人的反馈也会指出自己的不足以及给到自己正向的反馈,可谓一举四得。


环境搭建


clone 源码


目前 vue3 的仓库在这个地址vue-next,小伙伴们可以到这个地址克隆仓库。


安装依赖


进入项目目录,打开终端,这里要注意的是 Vue 3.2 之后的包管理切换到了 pnpm,所以这里要使用 pnpm install。如果你还没有安装 pnpm,需要先全局安装一下。


打包


因为我们目前是为了学习源码,所以我们希望打包的时候,使用 dev 的方式打包,同时为了调试的时候可以看到源码,所以我们在 dev 的命令中加上 --sourcemap


"dev": "node scripts/dev.js --sourcemap"
复制代码


接下来,我们运行 pnpm dev


网络异常,图片无法展示
|


当看到如下输出,说明打包已经完成,并且处于 waiting for changes 状态,也就是如果文件发生修改,会重新进行打包。


打包输出的文件就在 packages/vue/dist/vue.global.js


启动服务


package.json 中有一个 serve 命令,可以帮我们启动服务。 终端中运行 pnpm serve(之前的打包服务可以终止,也可以新开一个终端窗口运行该命令)。接下来,终端中显示如下界面,说明服务启动成功。


网络异常,图片无法展示
|


打开对应的本地服务地址


网络异常,图片无法展示
|


接下来打开 packages/vue/examples 目录,这里面会有一些 vue 给我们准备好的经典案例。


比如我们打开 composition/todomvc,这里面就是一个经典的 todolist 案例。此时打开控制台就可以进行调试了~


源码调试


打开 todomvc 页面后,打开 chrome 控制台 source 页签,通过 cmd+p 快捷键打开 todomvc 对应文件,这里我们以 Vue 的起始点 createApp 为例,找到 createApp 方法的调用,打上断点。


网络异常,图片无法展示
|


接下来刷新页面,脚本就会在断点处停止。此时点击右侧下箭头


网络异常,图片无法展示
|


就可以进入 createApp 方法定义的文件 packages/runtime-dom/src/index.ts。


网络异常,图片无法展示
|


并定位到 createApp 方法定义的位置。


这样,如果我们想看 createApp 是怎么实现的,就可以去 packages/runtime-dom/src/index.ts 文件中阅读相关源码了~ 😁


以上就是本文的全部内容了,喜欢的话点个赞吧!😜


会持续输出 Vue 源码学习文章,感兴趣的话点个关注吧!😁


如有任何问题或建议,欢迎留言讨论!

相关文章
|
5月前
|
JavaScript
Vue中如何实现兄弟组件之间的通信
在Vue中,兄弟组件可通过父组件中转、事件总线、Vuex/Pinia或provide/inject实现通信。小型项目推荐父组件中转或事件总线,大型项目建议使用Pinia等状态管理工具,确保数据流清晰可控,避免内存泄漏。
515 2
|
4月前
|
缓存 JavaScript
vue中的keep-alive问题(2)
vue中的keep-alive问题(2)
432 137
|
8月前
|
人工智能 JavaScript 算法
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
985 0
|
8月前
|
JavaScript UED
用组件懒加载优化Vue应用性能
用组件懒加载优化Vue应用性能
|
7月前
|
人工智能 JSON JavaScript
VTJ.PRO 首发 MasterGo 设计智能识别引擎,秒级生成 Vue 代码
VTJ.PRO发布「AI MasterGo设计稿识别引擎」,成为全球首个支持解析MasterGo原生JSON文件并自动生成Vue组件的AI工具。通过双引擎架构,实现设计到代码全流程自动化,效率提升300%,助力企业降本增效,引领“设计即生产”新时代。
570 1
|
8月前
|
JavaScript 前端开发 开发者
Vue 自定义进度条组件封装及使用方法详解
这是一篇关于自定义进度条组件的使用指南和开发文档。文章详细介绍了如何在Vue项目中引入、注册并使用该组件,包括基础与高级示例。组件支持分段配置(如颜色、文本)、动画效果及超出进度提示等功能。同时提供了完整的代码实现,支持全局注册,并提出了优化建议,如主题支持、响应式设计等,帮助开发者更灵活地集成和定制进度条组件。资源链接已提供,适合前端开发者参考学习。
599 17
|
7月前
|
JavaScript 安全
在 Vue 中,如何在回调函数中正确使用 this?
在 Vue 中,如何在回调函数中正确使用 this?
395 0
|
8月前
|
JavaScript 前端开发 UED
Vue 表情包输入组件实现代码及详细开发流程解析
这是一篇关于 Vue 表情包输入组件的使用方法与封装指南的文章。通过安装依赖、全局注册和局部使用,可以快速集成表情包功能到 Vue 项目中。文章还详细介绍了组件的封装实现、高级配置(如自定义表情列表、主题定制、动画效果和懒加载)以及完整集成示例。开发者可根据需求扩展功能,例如 GIF 搜索或自定义表情上传,提升用户体验。资源链接提供进一步学习材料。
471 1
|
8月前
|
存储 JavaScript 前端开发
如何高效实现 vue 文件批量下载及相关操作技巧
在Vue项目中,实现文件批量下载是常见需求。例如文档管理系统或图片库应用中,用户可能需要一次性下载多个文件。本文介绍了三种技术方案:1) 使用`file-saver`和`jszip`插件在前端打包文件为ZIP并下载;2) 借助后端接口完成文件压缩与传输;3) 使用`StreamSaver`解决大文件下载问题。同时,通过在线教育平台的实例详细说明了前后端的具体实现步骤,帮助开发者根据项目需求选择合适方案。
819 0
|
8月前
|
JavaScript 前端开发 UED
Vue 项目中如何自定义实用的进度条组件
本文介绍了如何使用Vue.js创建一个灵活多样的自定义进度条组件。该组件可接受进度段数据数组作为输入,动态渲染进度段,支持动画效果和内容展示。当进度超出总长时,超出部分将以红色填充。文章详细描述了组件的设计目标、实现步骤(包括props定义、宽度计算、模板渲染、动画处理及超出部分的显示),并提供了使用示例。通过此组件,开发者可根据项目需求灵活展示进度情况,优化用户体验。资源地址:[https://pan.quark.cn/s/35324205c62b](https://pan.quark.cn/s/35324205c62b)。
419 0