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 源码学习文章,感兴趣的话点个关注吧!😁


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

相关文章
|
9天前
|
存储 JavaScript 前端开发
vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
【10月更文挑战第21天】 vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
|
3天前
|
JavaScript
Vue基础知识总结 4:vue组件化开发
Vue基础知识总结 4:vue组件化开发
|
3天前
|
存储 JavaScript
Vue 状态管理工具vuex
Vue 状态管理工具vuex
|
9天前
|
缓存 JavaScript UED
Vue 中实现组件的懒加载
【10月更文挑战第23天】组件的懒加载是 Vue 应用中提高性能的重要手段之一。通过合理运用动态导入、路由配置等方式,可以实现组件的按需加载,减少资源浪费,提高应用的响应速度和用户体验。在实际应用中,需要根据具体情况选择合适的懒加载方式,并结合性能优化的其他措施,以打造更高效、更优质的 Vue 应用。
|
8天前
|
JavaScript
如何在 Vue 中使用具名插槽
【10月更文挑战第25天】通过使用具名插槽,你可以更好地组织和定制组件的模板结构,使组件更具灵活性和可复用性。同时,具名插槽也有助于提高代码的可读性和可维护性。
13 2
|
8天前
|
JavaScript
Vue 中的插槽
【10月更文挑战第25天】插槽的使用可以大大提高组件的复用性和灵活性,使你能够根据具体需求在组件中插入不同的内容,同时保持组件的结构和样式的一致性。
12 2
|
8天前
|
前端开发 JavaScript 容器
在 vite+vue 中使用@originjs/vite-plugin-federation 模块联邦
【10月更文挑战第25天】模块联邦是一种强大的技术,它允许将不同的微前端模块组合在一起,形成一个统一的应用。在 vite+vue 项目中,使用@originjs/vite-plugin-federation 模块联邦可以实现高效的模块共享和组合。通过本文的介绍,相信你已经了解了如何在 vite+vue 项目中使用@originjs/vite-plugin-federation 模块联邦,包括安装、配置和使用等方面。在实际开发中,你可以根据自己的需求和项目的特点,灵活地使用模块联邦,提高项目的可维护性和扩展性。
|
9天前
|
JavaScript 前端开发 UED
vue 提高 tree shaking 的效果
【10月更文挑战第23天】提高 Vue 中 Tree shaking 的效果需要综合考虑多个因素,包括模块的导出和引用方式、打包工具配置、代码结构等。通过不断地优化和调整,可以最大限度地发挥 Tree shaking 的优势,为 Vue 项目带来更好的性能和用户体验。
|
9天前
|
缓存 JavaScript UED
Vue 中异步加载模块的方式
【10月更文挑战第23天】这些异步加载模块的方式各有特点和适用场景,可以根据项目的需求和架构选择合适的方法来实现模块的异步加载,以提高应用的性能和用户体验
|
9天前
|
JavaScript 测试技术 UED
解决 Vue 项目中 Tree shaking 无法去除某些模块
【10月更文挑战第23天】解决 Vue 项目中 Tree shaking 无法去除某些模块的问题需要综合考虑多种因素,通过仔细分析、排查和优化,逐步提高 Tree shaking 的效果,为项目带来更好的性能和用户体验。同时,持续关注和学习相关技术的发展,不断探索新的解决方案,以适应不断变化的项目需求。