本文档解释了 Vue.js 单文件组件 (SFC) 的编译过程。它涵盖了 Vue 如何将带有 .vue 文件中的 <template>、<script> 和 <style> 块转换为可由 Vue 运行时使用的可执行 JavaScript 代码。有关通用模板编译机制的信息,请参阅 模板编译。
SFC 编译过程将 Vue 单文件组件转换为可执行的 JavaScript 和 CSS。这包括解析 SFC 文件,独立处理每个块,然后合并结果。
来源
第一步是使用 parse 函数将 .vue 文件解析为各个块,该函数返回一个包含所有块及其元数据的 SFCDescriptor。
解析器处理
lang="ts" 或 scoped)<style> 块中使用的 CSS 变量来源
脚本编译使用 compileScript 函数处理 <script> 和 <script setup> 块。这是 SFC 编译系统中最复杂的部分之一。
脚本编译的关键方面
导入处理:
宏处理:
defineProps 转换为运行时 props 声明defineEmits、defineExpose 等绑定分析:
代码生成:
setup() 函数来源
模板编译使用 compileTemplate 函数将 <template> 部分转换为渲染函数。
模板编译包括
来源
模板编译的一个关键部分是将模板中的表达式(例如 {{ variable }} 或 :prop="expression")转换为它们,以确保它们能与 Vue 的响应式系统正确协同工作。
这种转换确保
__props 访问.value 访问_ctx 访问来源
SFC 中的样式块经过特殊处理,以支持作用域样式和 CSS 变量。
CSS 处理的关键特性
v-bind() 进行响应式样式设置来源
SFC 编译器利用绑定信息来优化生成的代码,尤其是在模板中。
了解这些绑定类型可以让编译器
.value)来源
SFC 的 .vue 语法是 Vue SFC 的一项关键特性,它简化了组件的编写。编译器为这种语法处理了多项特殊特性
Script setup 编译的关键方面
defineProps 等宏转换为等效的运行时代码.vue 块集成(当两者都存在时)来源
SFC 编译的最终输出主要包括三个部分:
JavaScript 代码:
CSS 输出:
源映射:
SFC 编译器负责集成这些输出,确保它们在运行时无缝协同工作。
来源
SFC 编译器支持多种高级特性,超越了基本编译
TypeScript 集成:
预处理器支持:
源映射:
HMR 优化:
资源 URL 转换:
来源
通过提供全面且集成的单文件组件编译方法,Vue 的 SFC 编译器在 Vue 应用程序的开发者体验和运行时性能方面起着至关重要的作用。