Volar 0.x 版本演进全解析:Vue Language Tools 的能力迭代与配置变迁

发布时间:2026/10/15 10:27:22
Volar 0.x 版本演进全解析:Vue Language Tools 的能力迭代与配置变迁 开发工具IDE语言服务【免费下载链接】language-tools⚡ High-performance Vue language tooling based-on Volar.js项目地址https://gitcode.com/gh_mirrors/la/language-tools点击查看免费下载本篇技术指南以 Vue Language Tools基于 Volar.js 构建的 Vue 语言工具链的changelogs/CHANGELOG-v0.md为骨架完整梳理 0.x 时代0.0.5 至 0.40.13的核心能力演进vueCompilerOptions配置项的改名与合并路径、vue-tsc 与语言服务器 CLI 的变迁、LSP 语言特性inlay hints、format selection、goto implementations 等的引入节点以及volar.*系列 VSCode 设置的使用方式。读完本文你将能准确理解 Volar 0.x 各版本的关键改动并知道当前仓库源码中这些配置的真实解析逻辑与默认值。一、0.x 时代背景与文档结构说明CHANGELOG-v0.md是 Vue Language Tools项目曾用名 Volar在 0.x 阶段的完整版本历史按时间倒序排列最新的 0.40.132022/9/8在最上方最早的 0.0.52020/5/2在文件末尾。这一阶段对应 Volar 从VSCode 插件 vue-tsc逐步成长为独立语言工具链的时期仓库今天的包结构packages/language-core、packages/language-server、packages/tsc、packages/component-meta 等正是在这一时期的包改名与拆分中形成的。阅读这份 CHANGELOG 可以看到两条清晰的主线配置收敛大量experimental*前缀的实验选项被合并、改名最终沉淀为今天 vue-tsconfig.schema.json 中稳定的vueCompilerOptions字段功能补全从基础的模板语法高亮、类型检查逐步覆盖自动导入、格式化、引用/重命名、inlay hints、Call Hierarchy 等完整 LSP 能力。二、vueCompilerOptions 配置的演进主线vueCompilerOptions是 Volar 通过tsconfig.json/jsconfig.json读取的 Vue 专属编译选项。在 0.x 阶段它经历了多轮改名与合并理解这些变化有助于阅读历史 issue、迁移旧配置。2.1 experimentalCompatMode → target0.37.0 将vueCompilerOptions.experimentalCompatMode改名为vueCompilerOptions.target用于声明目标 Vue 版本{ vueCompilerOptions: { - experimentalCompatMode: 2 target: 2 }, }在 0.29.0 中还曾强调过experimentalCompatMode的行为变化不再强制为模板编译器注入compatConfig: { MODE: 2 }。今天的实现中target支持auto | 3 | 3.3 | 3.5 | 3.6 | 99见 vue-tsconfig.schema.json默认auto时由 CompilerOptionsResolver.resolveVueVersion 从node_modules/vue/package.json读取实际版本号决定。2.2 strictTemplates 合并两个 experimental 开关0.38.4 是一个配置收敛的重要节点experimentalSuppressUnknownJsxPropertyErrors与experimentalSuppressInvalidJsxElementTypeErrors被合并进单一的strictTemplates{ vueCompilerOptions: { - experimentalSuppressUnknownJsxPropertyErrors: false, - experimentalSuppressInvalidJsxElementTypeErrors: false, strictTemplates: true }, }strictTemplates的底层解析逻辑在 compilerOptions.ts开启后会把strictVModel、checkUnknownProps、checkUnknownEvents、checkUnknownDirectives、checkUnknownComponents五个选项一并置为true即未知 props / 事件 / 指令 / 组件一律报错的严格模式。默认值为falsestrictTemplates本身不参与序列化被Omit排除展开后落到具体check*字段。2.3 组件选项包装三个名字的变迁Options API 组件的类型推断依赖把export default { ... }包装进defineComponent/Vue.extend调用这一能力经历了三次命名0.34.13experimentalShamefullySupportOptionsApi→experimentalImplicitWrapComponentOptionsWithDefineComponent默认关闭0.38.7新增experimentalImplicitWrapComponentOptionsWithVue2Extend用Vue.extend包装面向 Vue 20.40.7上述两个选项合并为experimentalComponentOptionsWrapperBreaking changes 中明确说明替换关系。到 1.x 时代这一能力最终沉淀为 vue-tsconfig.schema.json 中的optionsWrapper字段默认值为[(await import(vue)).defineComponent(, )]。2.4 experimentalResolveNonScopedCssClasses → experimentalResolveStyleCssClasses0.34.3 将experimentalResolveNonScopedCssClasses改名为experimentalResolveStyleCssClasses用于控制模板中 CSS 类名的补全与跳转是否覆盖非 scoped 样式。今天的 schema 中该字段演进为resolveStyleClassNames类型为boolean | scoped默认scopedschema。仓库在 test-workspace/tsc/cssModule 与_failed_cssModuleDuplicate等用例中保留了相关回归场景。2.5 其余 experimental 选项一览CHANGELOG-v0 中出现的其他实验选项及其用途选项引入版本用途experimentalDisableTemplateSupport0.33.2完全关闭模板类型检查与智能提示experimentalTemplateCompilerOptionsRequirePath0.29.5允许从 JS 文件导入模板编译器选项如compatConfigexperimentalAllowTypeNarrowingInInlineHandlers0.34.12允许内联事件处理器中的类型收窄experimentalDowngradePropsAndEmitsToSetupReturnOnScriptSetup0.34.15在langjs的script setup中降级 props/emits 推断以改善智能提示experimentalRuntimeMode0.34.16适配 uni-app 的自定义运行时模式experimentalModelPropName—自定义 v-model 的 prop 名映射默认input: true、textarea/select: true见 schema从源码结构看types.ts0.x 的 experimental 选项最终被收敛为strictTemplates家族、optionsWrapper、resolveStyleClassNames、macros、composables等结构化字段配置面大幅收窄。2.6 tsconfig 集成方式0.29.7 起支持通过extends继承的 tsconfig 传递vueCompilerOptions0.30.3 起vueCompilerOptions在 tsconfig/jsconfig 中获得智能提示即vue-tsconfig.schema.json0.39.0 起该 schema 由volar/vue-language-core对外暴露今天的仓库中位于 extensions/vscode/schemas/vue-tsconfig.schema.json。解析链路见 compilerOptions.ts 的createParsedCommandLine先读取tsconfig.json再沿extends链逆序合并vueCompilerOptions最终通过CompilerOptionsResolver.addConfig逐键解析。plugins字段比较特殊——配置中声明后即替换继承列表空数组则清空源码注释。三、CLI 与包名的变迁vue-tsc、vue-language-server3.1 vue-tsc 命令行能力时间线vue-tsc 是tsc的包装器让 TypeScript 编译器能理解.vue文件。0.x 阶段逐步补齐了以下 CLI 能力版本能力0.28.0用 TypeScript 重写 vue-tsc版本与 Volar 保持同步0.28.6支持vue-tsc输出 SFC 的.d.ts声明文件0.33.0支持 vue-tsc watch 模式0.37.0支持--generateTraceTypeScript 性能追踪0.38.8支持--incremental标志修复 watch 内存泄漏0.36.0修复--extendedDiagnostics失效问题今天的 tsc README 给出两个最常用的命令# 类型检查不输出文件 vue-tsc --noEmit # 仅生成声明文件 vue-tsc --declaration --emitDeclarationOnly0.34.0 有一个重要前置条件模板类型检查要求 tsconfig 中配置jsx: preserve0.34.5 起对无 tsconfig 项目会自动预设该值0.34.6 起对缺失配置的项目弹出提示。3.2 语言服务器命令与包改名0.33.0volar/server改名为volar/vue-language-serverCLI 命令从vue-server改为vue-language-server同版本还完成了一组包改名vscode-vue-languageservice→volar/vue-language-service、vscode-typescript-languageservice→volar/typescript-language-service、vscode-json-languageservice→volar/json-language-service0.38.2vue-language-server增加--version标志0.40.10LSP initialize 响应中附带 server name 与版本信息。今天的语言服务器实现位于 packages/language-server/lib/server.ts测试用例覆盖了 completions、hover、inlay hints、semanticTokens、renaming 等十余个协议方向packages/language-server/tests。四、LSP 语言特性的引入节点0.x 阶段 Volar 的语言服务能力几乎每月都有新增以下是 CHANGELOG-v0 中记录的主要节点0.16.0Call Hierarchy调用层次支持通过app.component()调用自动声明__VLS_GlobalComponents0.18.0Linked Editing同步编辑对应 VSCode 的 synced regions0.28.5workspace symbols 搜索Ctrl/Command T0.33.0goto implementations支持自定义语言服务插件可替换内置格式化器、为自定义 block 注册语言支持0.34.8inlay hints内联提示。非 VSCode 客户端需要在initializationOptions中配置languageFeatures.inlayHints true开启0.36.0format selection选区格式化与 format on type模板内支持ts-check/ts-nocheckscript setup的 typed template slots0.40.0document highlights 跨script/template模板内自动导入auto import in template插件 APIplugin apiscript setup 中的类型在模板中的引用支持0.40.6支持 Web IDE 的语言特性。以 inlay hints 为例其协议路径在 packages/language-server/tests/inlayHints.spec.ts 中通过sendInlayHintRequest得到验证测试同时覆盖了多 hint 按位置排序的断言。4.1 initializationOptions 相关开关CHANGELOG-v0 明确记录了两个需要非 VSCode 客户端显式开启的特性开关开关位置版本languageFeatures.inlayHintsinitializationOptions0.34.8languageFeatures.implementationinitializationOptions0.33.0completion.ignoreTriggerCharactersinitializationOptions0.40.7适配 LSP-Volar避免 Sublime 补全触发过于激进volar.vueserver.textDocumentSync扩展设置0.40.6关闭增量更新规避部分客户端断档4.2 模板与脚本的深度互联0.x 的多个版本持续打通script setup与template之间的类型信息0.27.23 支持script setup中的类型在模板表达式里使用0.40.0 支持 script setup 引用类型在模板中的呈现reference types from script setup in template0.34.15 支持模板局部变量自动补全0.38.4 修复 slot shorthand 高亮、slot未知类型从unknown调整为any0.31.0 支持泛型 emits 与script setup顶层 await0.30.1 支持 Vue 2 组件 slot 类型、通过defineExpose暴露组件公共实例类型。五、volar.* 系列 VSCode 设置盘点CHANGELOG-v0 中大量条目以volar.*前缀出现它们是扩展配置项的演进史设置引入版本说明volar.formatting.printWidth0.26.11控制 HTML 格式化打印宽度volar.takeOverMode.enabled0.28.3即使内置 TS 扩展激活也启用 takeover 模式volar.lowPowerMode0.27.9低功耗模式0.34.0 改名volar.vueserver.useSecondServer0.34.0原volar.lowPowerMode默认关闭开启后内存翻倍但补全更快volar.vueserver.maxOldSpaceSize0.34.14修改语言服务器 Node 内存上限volar.vueserver.textDocumentSync0.40.6关闭增量更新volar.diagnostics.delay0.38.7延迟诊断以降低 CPU 占用volar.updateImportsOnFileMove.enabled0.38.7关闭文件移动时的 import 路径重构volar.format.initialIndent0.40.8格式化style/script时保留初始缩进volar.preferredTagNameCase0.24.2组件标签名大小写偏好volar.preferredAttrNameCase0.24.3属性名大小写偏好volar.preview.script.vite/volar.preview.script.nuxi0.34.14自定义预览服务器启动命令volar.splitEditors.layout.*0.34.14自定义分屏编辑器布局volar.autoCompleteRefs0.34.0默认关闭以降低 CPU 占用其中volar.takeOverMode是 0.27.17 引入的里程碑功能禁用内置 TypeScript 扩展、由 Volar 接管.ts/.js文件的语言服务从而让模板与脚本共享同一套类型上下文。0.39.1 还修复了takeOverMode.enabled: true与auto行为不一致的问题0.38.7 起 takeover 模式支持.cjs/.mjs。六、多语言与多框架支持时间线Volar 0.x 不只服务.vue文件还覆盖了周边生态模板语言0.20.6 大幅改进 pug 支持0.27.30 支持 markdown 中 vue block 的语法高亮样式语言0.21.12 postcss、0.21.18 sass/stylus、0.21.20 默认style语言配置0.33.0 支持langjson自定义 block 的更多语言特性0.29.3 支持langtoml框架集成0.26.12 支持 Vue 2 模板0.36.0 实验支持 Vue 2.70.37.0 支持 VitePress0.37.5 支持 petite-vue0.38.3 起提供 html/css 智能提示0.37.8 基于 petite-vue 支持派生 alpine-language-features 扩展应用预览0.26.9 实验性组件预览0.33.7 支持 Nuxt 3 预览与 goto code0.38.0 支持 Vite Vue 3 组件预览需另行安装 vite-plugin-vue-component-preview。仓库当前保留了对应的解析插件petite-vue 的 HTML 处理由petiteVueExtensions控制、VitePress 由vitePressExtensions控制schemapug 则由独立包 packages/language-plugin-pug 提供。七、性能与稳定性工程0.x 后半段0.34 ~ 0.40的 CHANGELOG 条目中perf:前缀明显增多代表 Volar 在增量编译与缓存上的持续投入增量解析0.40.3 增量更新 SFC block 而不整体重解析、增量更新模板插值而不重编译模板0.40.12 修复增量模板编译失效问题、缓存getScriptVersion的路径解析结果TS 快照缓存0.40.3 缓存ts.createSourceFile0.40.8 缓存ts.ScriptSnapshot.fromString文件系统缓存0.39.2 缓存fileExists、directoryExists结果防止每次更新都重复计算.ts文件服务实例瘦身0.34.0 减少 TS language service 实例数量代价是补全略慢0.27.23 懒计算 TS plugin proxy / program proxy 以加快初始化内存治理0.40.13 修复循环响应式引用导致的内存泄漏0.33.9 / 0.38.8 修复 vue-tsc watch 的内存泄漏。这些优化在今天的代码中仍可看到痕迹CompilerOptionsResolver.build把dataAttributes/htmlAttributes预编译为 picomatch 匹配器以避免逐属性编译 globcompilerOptions.ts。八、vue-component-meta从 0.39.2 起步的元数据提取0.39.2 引入 vue-component-meta用于静态提取组件的 props、events、slots、exposed 等元数据服务 Storybook 等文档生成场景0.40.2 增加createComponentMetaCheckerByJsonConfigAPI支持不依赖 tsconfig 直接以 JSON 配置创建 checker。当前仓库的 packages/component-meta/index.ts 暴露createChecker读 tsconfig与createCheckerByJson直接传 JSON 配置两个入口底层统一走createCheckerBase其vueCompilerOptions即通过前面介绍的createParsedCommandLineByJson解析。README 中的典型用法import { createChecker } from vue-component-meta; const checker createChecker(/path/to/tsconfig.json, { schema: true, }); const meta checker.getComponentMeta(/path/to/MyComponent.vue);九、从 0.x 到 1.x迁移提示0.x 配置与 1.x 的对应关系可以总结为三条迁移主线均已在正文给出源码/文档依据experimentalCompatMode→target支持auto自动探测各experimentalSuppress*/experimentalImplicitWrap*/experimentalShamefully*→ 收敛为strictTemplates与optionsWrapper样式类名解析 →resolveStyleClassNamesboolean | scoped。后续版本历史记录在 changelogs/CHANGELOG-v1.md1.8.x 时代与 changelogs/CHANGELOG-v2.md其中 1.8.24 将 Vue 2 类型迁至vue-component-type-helpers/vue2volar/*包名也逐步更替为vue/*但vueCompilerOptions的核心解析逻辑仍保留在 packages/language-core/lib/compilerOptions.ts 中可对照本文章节 2 一并阅读。赞分享开发工具IDE语言服务【免费下载链接】language-tools⚡ High-performance Vue language tooling based-on Volar.js项目地址https://gitcode.com/gh_mirrors/la/language-tools点击查看免费下载相关推荐Linkerd 1.x 版本演进全览从 CHANGES.md 读懂 Linkerd 1.x 的功能迭代与配置变更Linkerd 1.x 版本演进全览从 CHANGES.md 读懂 Linkerd 1.x 的功能迭代与配置变更 Linkerd 1.x 是一个基于 Nett云原生网络微服务actions/artifact 版本演进全解析从 0.1.0 到 6.3.1 的架构迭代与关键能力变迁actions/artifact 版本演进全解析从 0.1.0 到 6.3.1 的架构迭代与关键能力变迁 导读 actions/artifact 是 GiCI/CD开发工具CDK for Terraform 版本演进全解析从 0.0.x 到 0.21 的破坏性变更、能力迭代与升级迁移实践CDK for Terraform 版本演进全解析从 0.0.x 到 0.21 的破坏性变更、能力迭代与升级迁移实践 CDK for Terraform下文IaC云原生开发工具创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询