如何阅读Vue3源码?

上篇文章我们已经成功地下载了Vue3的源码并运行了一个测试实例代码,在这样的一个测试实例代码中,Vue内部是如何执行的呢?本篇文章我们一起探究一下。 我们如何对Vue进行debugger操作呢?我想首先得要开启Vue的source-map功能吧。

如何开启source-map?

source-map功能是可查看到未打包时的代码,而不是查看打包之后的代码。我们来查看一下控制台里的源码,可以看到当前的源码就一个global文件,这对我们的dedugger是非常不友好的。那如何为Vue开启sourceMap呢?

首先看到build命令,执行的是scripts/目录下的build文件;

json 复制代码
"build": "node scripts/build.js",

让我们打开build.js文件,查看一下source-map的逻辑;

这样一行代码是干嘛的呢?这句SOURCE_MAP:true最终会被rollup进行构建,也就是说我们在rollup.config.js,在rollup的配置文件里查看一下source-map的逻辑;

output.sourcemap 取决于等号后面的一串值,等好后面的一串值就是build.js中的SOURCE_MAP:true;也就是说只要build.js里的sourceMap为true,rollup中的sourcemap就为true,这也是开启source-map的关键;

build.js中的sourceMap取决于args.sourcemap或者args.s,那这个args是什么呢?args是27行minimist包中的返回的值; 接着我们来查看一下minimist这个包,点击这里,minimist的介绍里有一个例子; minimist的作用就是执行npm命令的时候去增加一些参数,让我们一起去试一下!

我们的npm的命令在package.json,在build的命令后面添加-b test的代码,接着打印一下build.js中的args对象;

npm run build之后终端已经成功打印了我们刚添加的b参数了;

再回过头看build.js文件中,sourceMap的值取决于args中的sourcemap或者s; 那我们去刚才package.json位置修改一下代码; 这个时候再去打印一下agrs和sourceMap的值,此时sourceMap的值已经变成true了,也就是说在rollup中也成功开启sourceMap功能;

我们来看一下项目是否开启了sourceMap功能,执行npm run build打包命令之后,在packages/vue/dist路径下会生成一个vue.cjs.js.map文件,此时就证明我们已经成功开启sourceMap的功能啦ʚʕ̯•͡˔•̯᷅ʔɞ

如何对Vue进行debugger操作?

我们已经成功开启sourceMap功能了,再来查看一下控制台的源代码;可以看到明显的不同,我们已经能成功看到Vue中具体的模块了,这时我们就可以去进行debugger;上篇文章中的测试实例,我们可以看下reactive做了什么事情。 首先控制台打开reactive.ts文件,找到reactive方法,在前面打上断点,重新刷新页面,当前的代码已经成功进入了reactive方法中,这时我们就成功debugger啦ʚʕ̯•͡˔•̯᷅ʔɞ

如何阅读源代码?

俗话说得好,读书破万卷,下笔如有神;我觉得不仅在写作上是这样,编程也是这样的;只有阅读了好代码,才能写出好代码。

阅读源代码的误区

首先源代码代码量是非常大的,如果我们要求必须读明白每一行代码的意思,那可能一开始就劝退了大家,所以我们需要一条主线,沿着这条主线顺藤摸瓜逐步领会其中的奥秘。

阅读源代码的正确方式

想要高效、轻松的阅读源代码,一定要遵循这两点建议:

1.摒弃边缘情况;

2.跟随一条主线;

摒弃边缘情况:

在大型项目的源码中,会有非常多的业务代码,比如说下图的renderer文件中有一个变量,叫isSVG,是用来标识当前是否是svg图像,那么一定有if和else的逻辑,svg的逻辑在日常中使用的频率并不是很高,所以说它可以被看作是边缘情况先被忽略。

跟随一条主线

对于Vue这种大型项目来说,仅仅是阅读核心代码也是非常多的。Vue的核心可被分成三块: 1.响应时 2.运行时 3.编译器

在上文中的测试实例中,我们在reactive方法中打上断点,重新执行一下发现下图红框中的内容被跳过了;

那我们进入createReactiveObject方法中发现下图中红框里的内容都没有被执行;因此红框里的代码就不用关注了,只用跟随主线看执行了的逻辑;

相关推荐
用户91743965396 分钟前
Magnitude:强!一款基于 Al 视觉的 Web 自动化框架
运维·前端·自动化
+VX:Fegn089539 分钟前
计算机毕业设计|基于springboot + vue在线教育学习系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·学习·课程设计
军军君0142 分钟前
Three.js基础功能学习四:摄像机与阴影
开发语言·前端·javascript·3d·typescript·three·三维
lambo mercy1 小时前
python入门
前端·数据库·python
GIS之路2 小时前
GDAL 实现矢量数据读写
前端
05大叔2 小时前
MybatisPlus
java·服务器·前端
slongzhang_2 小时前
edge/Chrome浏览器闪屏/花屏
前端·chrome·edge
想要一辆洒水车2 小时前
npm包开发及私有仓库配置使用
前端
低代码布道师2 小时前
互联网医院18:前端进阶——CSS“父相子绝”打造专业级卡片交互
前端·css·低代码·小程序·云开发
luckyCover2 小时前
Vue源码分析 - 从入口到构造函数的整体流程
前端·vue.js