Vue3 源码解读之目录结构

260 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第17天,点击查看活动详情 >>

版本:3.2.31

版本:3.2.31

在进入源码的阅读之前,我们先来了解下vue3源码的架构,以及使用到的工具,对vue3源码架构有一个整体的认识。

vue3 外层目录结构

GitHub上vue3源码在core目录下,clone到本地后进入core目录,在终端执行 tree -aI ".git*|.vscode" -C -L 1 获取目录结构:

├── .DS_Store
├── .eslintrc.js // ESLint 代码风格检查工具的配置文件
├── .prettierrc  // 代码格式化 prettier 的配置文件
├── BACKERS.md
├── CHANGELOG.md  // 更新日志
├── LICENSE
├── README.md
├── SECURITY.md
├── api-extractor.json  // TypeScript 的API提取和分析工具
├── jest.config.js  // 测试框架 jest 的配置文件
├── netlify.toml  // netlify 部署的配置文件
├── node_modules
├── package.json
├── packages  // Vue源代码目录
├── pnpm-lock.yaml // pnpm 的依赖包管理配置文件
├── pnpm-workspace.yaml  // pnpm 的 workspcae 配置文件
├── rollup.config.js  // 模块打包器 rollup 的配置文件
├── scripts
├── test-dts  // TypeScript 声明文件
└── tsconfig.json  // TypeScript 配置文件

上面用到的一些工具中,使用了 pnpm 包管理工具,在安装依赖时需要使用 pnpm install 命令,使用 npm 或 yarn 会报错。

packages 源码目录结构

vue3的源码在packages目录下,我们还是执行 tree -aI ".git*|.vscode" -C -L 1 命令获取目录结构:

├── .DS_Store
├── compiler-core  // 核心编译模块,抽象语法树和渲染桥接实现
├── compiler-dom   // DOM的实现
├── compiler-sfc   // Vue单文件组件(.vue)的实现
├── compiler-ssr
├── global.d.ts
├── reactivity
├── reactivity-transform
├── runtime-core
├── runtime-dom      // 程序运行时(即程序被编译之后)的DOM处理
├── runtime-test
├── server-renderer  // 服务端渲染实现
├── sfc-playground  
├── shared           // package 之间共享的工具库
├── size-check       // 检查tree-shaking 后运行的代码包大小
├── template-explorer
├── vue
└── vue-compat

在 packages 的目录结构中,比较重要的模块有5个,它们是:

  • compiler-core
  • compiler-dom
  • runtime-core
  • runtime-dom
  • reactivity

compiler 模块是在编译阶段将.vue文件编译成浏览器能识别的.html文件。runtime模块则是在运行阶段对DOM进行一系列处理。reactivity 模块则是vue中的响应式处理。

模块依赖关系图

根据模块之间的调用关系,可以得出如下的模块关系图: