一、以 Vue 3.4 版本为例

Vue 的项目存储库采用的是 monorepo 设置,即将多个项目的源代码存储在同一个代码库,并使用 pnpm (是一个 JavaScript 包管理工具) 来管理 monorepo:

代码库:https://github.com/vuejs/core

在 packages 目录下存放了不同的包:

1/// ...
2├── packages
3│   ├── compiler-core
4│   ├── compiler-dom
5│   ├── compiler-sfc
6│   ├── compiler-ssr
7│   ├── global.d.ts
8│   ├── reactivity
9│   ├── runtime-core
10│   ├── runtime-dom
11│   ├── runtime-test
12│   ├── server-renderer
13│   ├── shared
14│   ├── vue
15│   └── vue-compat
16/// ...

 

  • compiler-core:与平台无关的编译器核心。包括编译器的可扩展基础和所有与平台无关的插件
  • compiler-dom:针对浏览器的编译器,包含额外的插件
  • compiler-sfc:用于编译 Vue 单文件组件的底层工具
  • compiler-ssr:生成优化用于服务端渲染的渲染函数的编译器
  • reactivity:响应式系统。可以作为独立的、与框架无关的包使用
  • runtime-core:与平台无关的运行时核心。包括虚拟 DOM 渲染器、组件实现和 JavaScript API 的代码。可以使用此包创建针对特定平台的高阶运行时(即自定义渲染器)
  • runtime-dom:针对浏览器的运行时。包括对原生 DOM API、属性、属性、事件处理程序等的处理
  • runtime-test:用于测试的轻量级运行时。由于它“渲染”出的是一个纯 JavaScript 对象的树,可以在任何 JavaScript 环境中使用。该树可以用于断言正确的渲染输出,也提供了序列化树、触发事件以及记录更新期间执行的实际节点操作的工具
  • server-renderer:用于服务端渲染的包
  • shared:在多个包之间共享的内部工具(特别是运行时和编译器包使用的与环境无关的工具)
  • vue:对外公开的“完整构建”,包括运行时和编译器
  • vue-compat  Vue 3 的一个构建版本,它提供了可配置的 Vue 2 兼容行为,可以认为是一个 “迁移构建”

 

这些包的依赖关系,可以参考官方提供的图例 (https://github.com/vuejs/core/blob/main/.github/contributing.md#package-dependencies):

 

还有一些私有的包 (packages-private):

1/// ...
2├── packages-private
3│   ├── dts-built-test
4│   ├── dts-test
5│   ├── sfc-playground
6│   ├── template-explorer
7│   └── vite-debug
8/// ...

 

  • dts-test:包含针对生成的 dts 文件的类型测试
  • sfc-playground:持续部署在 https://play.vuejs.org 的 playground。要在本地运行 playground,需要运行 nr dev-sfc
  • template-explorer:用于调试编译器输出的开发工具,持续部署在 https://template-explorer.vuejs.org/ 。要在本地运行它,需要运行 nr dev-compiler

 

Vue 提供许多脚本方便打包构建时使用:

1/// ...
2├── scripts
3│   ├── aliases.js
4│   ├── build.js
5│   ├── dev.js
6│   ├── inline-enums.js
7│   ├── pre-dev-sfc.js
8│   ├── release.js
9│   ├── setup-vitest.ts
10│   ├── size-report.ts
11│   ├── usage-size.ts
12│   ├── utils.js
13│   ├── verify-commit.js
14│   └── verify-treeshaking.js
15/// ...

 

例如编译 reactivity 包,输出在 packages/reactivity/dist 目录下:

npm run build reactivity

 

如果要调试 Vue Reactivity,则可以使用:

npm run dev reactivity

 

二、其他

学习的记录,仅供参考