搭建vue源码的阅读环境

本文详细介绍了阅读Vue.js源码的步骤,从安装依赖到理解代码结构,包括核心包、打包入口、全局API及实例入口。通过源码调试,深入探讨了$mount方法和运行时机制。建议在掌握基本API的前提下,通过断点调试和编写测试用例来辅助源码学习。
摘要由CSDN通过智能技术生成

源码阅读

阅读源码是建立在对vue各种api熟练运用的情况下的。

  1. 安装源码依赖 npm install
  2. npm run dev是否可以打包成功

代码结构:

  • bechmarks:该目录是做性能测试的
  • dist:最终打包的结果都放到了该目录
  • examples:官方案例
  • flow:类型检测(vue2使用,类似于ts,但是没有ts好用)
  • packages:放的都是一些源代码包,模块。(vue源码中包含了weex)
  • scripts:所有打包的脚本都放在这里
  • scr:源代码目录

scr目录:

  • compiler:模板编译
  • core:vue2核心代码包
  • platforms:平台,跨平台使用
  • server:ssr服务端渲染
  • sfc:单文件组件,解析单文件模板(需要结合vue-loader使用的)
  • shared:模块之间共享的属性和方法

找打包入口:配置文件,scripts/config.js

image-20220418151526038

image-20220418152806333

image-20220418152828840

打包入口:

我们只关心两个:

  1. web/entry-runtime.js
  2. web/entry-runtime-with-compiler.js

然后找到配置文件的真实位置

const aliases = require('./alias')
// web/entry-runtime-with-compiler.js
const resolve = p => {
  // web, entry-runtime-with-compiler.js
  const base = p.split('/')[0]
  if (aliases[base]) {
    // web: resolve('src/platforms/web')
    // src/platforms/web/entry-runtime-with-compiler.js
    // 找别名 然后文件找到绝对路径
    return path.resolve(aliases[base], p.slice(base.length + 1))
  } else {
    return path.resolve(__dirname, '../', p)
  }
}

src/platforms/web/entry-runtime-with-compiler.js

image-20220418153644469

两个入口文件的区别:

entry-runtime-with-compiler文件就是重写了 $mount方法,支持把template转为render函数了。

image-20220418160310001

当然,这两文件也并不是真正的入口,

image-20220418160638161

去往runtime包。这个包提供的就是运行时vue是如何处理的。

所谓的运行时,会提供一些dom操作的api,比如属性操作,元素操作,也提供了一些组件和指令。

image-20220418161007727

image-20220418161410125

前往Vue构造函数所在的文件:

  • 从web/runtime/index前往 core/index.js,发现这个文件也不是入口

image-20220418161639292

  • globalAPI实现了很多全局API

  • 接下来去往instance/index文件,这里是Vue真正的入口文件,有Vue构造函数了。

image-20220418161937282

image-20220418162346437

源代码调试

想知道每一个具体是如何实现的:

  1. 掌握了核心流程,可以单独去看源码
  2. 不知道核心流程,可以写一些测试用例,或者写一些案例来调试源代码

我们在打包时,需要生成sourcemap文件进行ES6-ES5的联调,关联源码调试

"script":{
    "dev": "rollup -w -c scripts/config.js --environment TARGET:web-full-dev --sourcemap",
}

image-20220418165626568

不知道源码的核心流程,就在浏览器这里打断点调试,知道流程可以去对应的源码部分打断点调试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尤雨东

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值