Skip to content

准备工作

  • 需要的能力
  1. vue3/vue2 基本使用

  2. typescript(必要)

  3. 位运算(我也是现学,vue3对这部分用的比较多,主要用于优化和标记)

  4. Rollup(ES Modules 打包器,要有个概念),生产包使用了这个

  5. esbuild(模块打包工具,go写的所以非常快),开发模式用的这个

  6. pnpm npm库的管理工具, 提供了workspace, 这个需要了解,并且vue3源码使用的是 monorepo(国内用的比较少,需要了解)

  • 下载源码(我使用的版本是3.4.14这个tag)

    js
    git clone https://github.com/vuejs/core.git
    cd core
  • 切换分支

    shell
     git tag // 查看所有tag
     git checkout -b 你自己的分支名 tag_name     // 建议基于标签新建分支
  • 安装依赖 需要使用pnpm,没有的要安装

    js
    npm install pnpm -g
    
    pnpm install
  • 查看目录结构

    compiler-core、compiler-dom、runtime-core、runtime-dom这几个模块比较重要。 compile:可以理解为程序编译时,是指我们写好的源代码在被编译成为目标文件这段时间,在这里可以理解为我们将.vue文件编译成浏览器能识别的.js文件的一些工作。 runtime:可以理解为程序运行时,即程序被编译了之后,在浏览器打开程序并运行它,直到程序关闭的这段时间的系列处理。 reactivity目录也比较重要,它是响应式模块的源码,由于Vue 3整体源码采用的是Monorepo(单体仓库)规范,因此其下面每个子模块都可以独立编译和打包,从而独立对外提供服务,在使用时采用require('@vue/reactivity')引入,进入reactivity目录下可以看到有对应的package.json文件。

shell

  core
  ├─ packages
  ├─ compiler-core   // 核心编译器
  ├─ compiler-dom    // dom编译器
  ├─ compiler-sfc    // vue单文件编译器
  ├─ compiler-ssr    // 服务端渲染编译
  ├─ dts-test  //测试Typescript类型以确保类型保持为预期类型
  ├─ global.d.ts  // TypeScript声明文件
  ├─ reactivity  // 响应式模式,可以和其它框架配合使用
  ├─ reactivity-transform  // 该功能现在被标记为不推荐使用,并将从Vue核心中删除,提案已经被放弃。
  ├─ runtime-core // 运行时核心实例相关代码
  ├─ runtime-dom  // 运行时dom相关API、属性、事件处理  
  ├─ runtime-test  // 运行时测试相关代码
  ├─ server-renderer // 服务器渲染
  ├─ sfc-playground // 单文件组件在线调试器
  ├─ shared // 内部工具库,不对外暴露
  ├─ size-check // 测试代码体积
  ├─ template-explorer // 用于调试编译器输出的开发工具
  ├─ vue //面向公众的完整版本,包含运行时和编译器
  └─ vue-compat //是Vue 3的一个构建,它提供了可配置的Vue 2兼容行为。