Volar是Vue.js的官方VSCode扩展。虽然官方推荐了Vetur,但Volar仍然是一个个人项目,随着时间的推移,由于性能和架构的改进,它被采纳为一个新的官方扩展。作为一个以提升开发体验为目标的项目,历时两年多才到达1.0版本,稳定性也在不断提升。但还有很多工作要做,2023年还有更精彩的计划!Volar.js:嵌入式语言工具框架尽管最初是为Vue单文件组件的特定需求而设计的,但Volar的代码库包含许多非Vue特定的部分,例如:嵌入式编程语言的处理;Vue语言服务器实际上是一个完整的TypeScript语言服务器;处理与LSP/Web/EmbeddedLanguageServices等交互的代码注:语言服务器不是真正的服务器,而是将语言相关的特性和功能从IDE中解耦出来,作为一个独立的程序运行,并提供功能的具体实现例如参考查询。这些通用部分现在已被提取到一组与框架无关的工具中。这些工具现在作为一个新的独立项目进行维护:Volar.js[1]。Volar.js的架构支持任何涉及嵌入式语言的文件格式——不仅仅是Vue,还有Astro、Svelte,甚至Angular。它还能够实现常规的单语言LSP服务器,例如TypeScript、CSS和HTML。Volar.js的另一个主要关注点是性能。它旨在最大限度地减少实现本地嵌入式语言服务性能的开销。很多问题和优化机会只有在用户量大的时候才能发现,而Volar.js是根据百万次下载积累的经验进行优化的。例如,字节跳动的Lynx团队是Volar.js的早期采用者,一名开发人员在两周内交付了支持其内部框架的全套语言工具。如果从头开始构建,即使是一个团队也需要几个月的时间。旧的Volar现在是vuejs/language-tools提取核心后,原始Volar扩展和vue-tsc的代码库已移至vuejs/language-tools[2]存储库。这个存储库现在依赖于Volar.js并包含Vue特定支持的代码。除此之外,一些npm包将从@volar的npm组织转移到@vue。不过,这些更改不应影响用户。团队和组织Vite[3]从Vue生态系统中脱颖而出,并最终成长为自己的社区,连接整个Web开发生态系统中的用户。Volar.js希望走同样的路。Volar作者JohnsonChu与Astro核心团队成员Erika组成了Volar.js核心团队,以改善开发者体验。该团队将共同努力,为所有Web开发人员改进DX,而不仅仅是Vue和Astro。他们创建了volarjs组织来维护框架和相关存储库:volar.js:框架的核心插件[4]:可以在volar.config.js或框架的插件中使用volarjs.github.io[5]:官方网站language-tools-starter[6]:开始使用Volar.js构建语言服务器模板ecosystem-ci[7]:用于运行volar生态系统项目的集成测试pug-language-tools[8]:基于language-tools-starterPugtoolangular-language-tools[9]:Angularexamplebasedonlanguage-tools-startersvelte-language-tools[10]:Svelteexamplebasedonlanguage-tools-starter下一步这只是一个开始,没有明确但长期的路线图,但这里有一些我们计划下一步探索和工作的主要方向。Monaco支持Monaco对Vue的支持目前由monaco-volar实现,Volar团队计划在框架中支持它,因此所有基于Volar.js的语言服务器都可以轻松使用它。支持VSCode以外的IDE除了VSCode,许多贡献者还为Volar的Vim、Sublime、Atom、Emacs、Nova、Lapce和其他IDE实现了语言客户端。拥有一整套的IDE支持可以有很大的参考价值,因为很少有人精通它们。Volar团队将寻找方法来利用这些贡献者的努力,以减少框架消费者在VSCode之外实现语言客户端的工作量。除此之外,虽然IntelliJ没有一流的LSP支持,但Volar团队将研究它是否可以与框架集成。理论上,Volar的性能只能无限接近基于Bun的语言服务器,但不会比vanillaTS语言服务器快。但是,如果Volar语言服务器可以通过在Bun中运行它来获得性能提升,它可能会改变游戏规则。以前Bun运行时与基于Node.js的LSP服务器不兼容。Volar团队会持续关注相关问题,待问题解决后再试。同样,所有基于Volar.js的语言服务器都将能够直接从中受益。单体服务器想象一下这样一种场景,每种语言都需要支持某些TypeScript功能,然后每种语言的语言服务器将运行自己昂贵的TypeScript语言服务实例,这会使事情变得更糟,因为内存和CPU使用率会成倍增加,这就是今天已经发生了。如果这些语言服务器中的一些是基于Volar.js的,那么它们可能有某种方式来决定只激活一个语言服务器,然后将其余语言服务器的功能共享给激活的服务器,这样在结束只需要一个语言服务器实例,并且TypeScript语言服务未在多个语言服务器中运行。这也可以解决TypeScript插件无法支持的一些用例。基于Volar.js架构,它非常接近这个目标,Volar团队将探索这个功能用于Vue和Astro语言服务器。当ESLint和Prettier一起使用时,RulesAPI(内置Linter)会导致冲突,而过去基于PluginAPI的尝试并没有很好地避免这个问题。RulesAPI是避免不同linting工具之间冲突的另一种尝试,同时还确保性能和功能与IDE很好地集成。对于元框架,他们需要为ESLint和Prettier实现自己的解析器,但是使用RulesAPI,他们甚至不需要这样做,因为可以重用Volar语言服务器的解析器。因此,如果编写了TS规则,它将直接通过RulesAPI用于Vue的
