如何阅读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方法中发现下图中红框里的内容都没有被执行;因此红框里的代码就不用关注了,只用跟随主线看执行了的逻辑;

相关推荐
轻口味28 分钟前
【每日学点鸿蒙知识】AVCodec、SmartPerf工具、web组件加载、监听键盘的显示隐藏、Asset Store Kit
前端·华为·harmonyos
alikami30 分钟前
【若依】用 post 请求传 json 格式的数据下载文件
前端·javascript·json
吃杠碰小鸡1 小时前
lodash常用函数
前端·javascript
emoji1111111 小时前
前端对页面数据进行缓存
开发语言·前端·javascript
泰伦闲鱼1 小时前
nestjs:GET REQUEST 缓存问题
服务器·前端·缓存·node.js·nestjs
m0_748250031 小时前
Web 第一次作业 初探html 使用VSCode工具开发
前端·html
一个处女座的程序猿O(∩_∩)O1 小时前
vue3 如何使用 mounted
前端·javascript·vue.js
m0_748235951 小时前
web复习(三)
前端
迷糊的『迷』2 小时前
vue-axios+springboot实现文件流下载
vue.js·spring boot
web135085886352 小时前
uniapp小程序使用webview 嵌套 vue 项目
vue.js·小程序·uni-app