本文档介绍 Vue.js 核心仓库,解释了其架构、关键组件以及它们如何协同工作构成 Vue.js 框架。Vue.js 核心代码库被组织成一个单仓(monorepo),包含多个包,共同实现了 Vue 的响应式系统、组件模型、模板编译器和渲染引擎。
来源: README.md1-56 package.json1-132
Vue.js 核心仓库遵循单仓(monorepo)架构,其中多个相互依赖的包被管理在同一个仓库中。这种结构有助于提高包之间的协调性并实现统一的版本控制。
来源: package.json1-132 packages/vue/package.json1-112 packages/runtime-dom/package.json1-60
Vue.js 核心被划分为几个相互关联的包,每个包负责框架的特定方面
来源: packages/vue/package.json1-112 packages/runtime-core/package.json1-52 packages/reactivity/package.json1-55 packages/compiler-sfc/package.json1-67
Vue.js 提供多种分发格式以支持不同的用例
| 格式 | 描述 | 主要用例 |
|---|---|---|
| esm-bundler | 用于打包器的 ES 模块 | Webpack、Rollup、Vite |
| esm-browser | 浏览器端的 ES 模块 | 通过 `<script type="module">` 直接在浏览器中使用 |
| cjs | CommonJS | Node.js, 较旧的打包器 |
| global | IIFE | 通过 `<script>` 直接在浏览器中使用 |
| global-runtime | 仅 IIFE 运行时 | 当模板预编译时,包会更小 |
这些格式是使用定义在 `scripts` 目录中的自定义 Rollup 构建系统构建的。
来源: package.json6-46 packages/vue/package.json72-82
Vue.js 由四个主要子系统组成,它们协同工作
响应式系统会自动跟踪 JavaScript 状态变化并在需要时触发更新。它建立在以下关键概念之上:
来源: packages/reactivity/package.json1-55
Vue 模板会经过一个编译过程,转化为可执行的渲染函数
来源: packages/compiler-core/package.json1-58 packages/compiler-dom/package.json1-57
渲染系统根据虚拟 DOM 创建和更新 DOM
来源: packages/runtime-core/package.json1-52 packages/runtime-dom/package.json1-60
组件系统管理组件的创建、挂载、更新和生命周期
来源: packages/runtime-core/package.json1-52
Vue 通过其自定义元素集成,提供了内置的服务器端渲染能力,通过 `server-renderer` 包,允许应用程序在服务器上预渲染,以提高性能和 SEO。
来源: packages/server-renderer/package.json1-55
`compiler-sfc` 包负责处理 `.vue` 文件,这些文件将模板、脚本和样式封装在单个文件中。
来源: packages/compiler-sfc/package.json1-67
Vue 通过其自定义元素集成,支持创建自定义的内置元素(Web Components)。
有关 Vue.js 核心特定方面的更详细信息,请参阅以下 Wiki 页面:
Vue.js 核心仓库包含一个强大的开发环境,提供用于构建、测试和验证更改的工具。要为 Vue.js 开发做出贡献,请参考仓库的贡献指南。