Volar 是 Vue.js 官方的 VSCode 扩展。当官方推荐 Vetur 时,Volar 还是一个个人项目,随着时间的推移,由于改进的性能和体系结构而被采纳为新的官方扩展。作为一个旨在改善开发体验的项目,用了两年多的时间才达到了 1.0 版本,并且一直在不断改进稳定性。但还有许多工作要做,2023 年有更令人兴奋的计划!

Volar.js:嵌入式语言工具框架

尽管最初是为 Vue 单文件组件的特定需求而设计的,但 Volar 的代码库包含许多不特定于 Vue 的部分,例如:

  • 嵌入式编程语言的处理;

  • Vue 语言服务器实际上是一个成熟的 TypeScript 语言服务器;

  • 处理与 LSP / Web / 嵌入式语言服务等交互的代码。

注:语言服务器并不是一个真的服务器,而是把语言相关的特性和功能从 IDE 中解耦出来,作为一个独立的程序单独运行,提供了例如引用查询等功能的具体实现。

现在已经将这些通用部分提取到一组与框架无关的工具中。这些工具现在作为一个新的独立项目进行维护:Volar.js[1]。

Volar.js 的架构支持任何涉及嵌入式语言的文件格式——不仅是 Vue,还包括 Astro、Svelte,甚至 Angular。它还能够实现常规的单语言 LSP servers,例如 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 作者 Johnson Chu 与 Astro 核心团队成员 Erika 建立了 Volar.js 核心团队,致力于改善开发者体验。团队将共同努力,为所有 Web 开发者改进 DX,而不仅仅是 Vue 和 Astro。

他们创建了 volarjs 组织来维护框架和相关的存储库:

  • volar.js:框架的核心

  • plugins[4]: 可以在 volar.config.js 或框架的 plugins 中使用

  • volarjs.github.io[5]:官方网站

  • language-tools-starter[6]:开始使用 Volar.js 构建语言服务器模板

  • ecosystem-ci[7]:用于运行 volar 生态系统项目的集成测试

  • pug-language-tools[8]:基于 language-tools-starter 的 Pug 工具

  • angular-language-tools[9]:基于 language-tools-starter 的 Angular 示例

  • svelte-language-tools[10]:基于 language-tools-starter 的 Svelte 示例

下一步

这只是一个开始,目前还没有明确的长期路线图,但这里有一些计划在接下来探索和努力的主要方向。

Monaco 支持

Monaco 对 Vue 的支持目前由 monaco-volar 实现,Volar 团队计划在框架中支持它,因此所有基于 Volar.js 的语言服务器都可以轻松使用它。

支持 VSCode 以外的 IDE

除了 VSCode 之外,许多贡献者还为 Volar 的 Vim、Sublime、Atom、Emacs、Nova、Lapce 等其他 IDE 实现了语言客户端。拥有一整套的 IDE 支持可能有很大的参考价值,因为很少有人能够精通所有这些 IDE。

Volar 团队将寻找方法来利用这些贡献者的努力,以减少框架使用者在 VSCode 之外实现语言客户端的工作量。

除此之外,虽然 IntelliJ 没有一流的 LSP 支持,Volar 团队将研究是否可以将其与框架集成。

基于 Bun 的语言服务器

理论上,Volar 的性能只能无限接近,但不会快于 vanilla TS 语言服务器。但是,如果 Volar 语言服务器可以通过在 Bun 中运行而获得性能提升,它可能会改变游戏规则。

以前 Bun 运行时还不兼容基于 Node.js 的 LSP 服务器。Volar 团队会持续关注相关问题,待问题解决后进行重试。同样,所有基于 Volar.js 的语言服务器都将能够直接从中受益。

单体服务器

想象一个场景,每种语言都需要支持一些 TypeScript 特性,那么每种语言的语言服务器都会运行自己昂贵的 TypeScript 语言服务实例,这让情况变得变得糟糕,因为内存和 CPU 使用率都会成倍增加,而这种情况如今已经发生了。

如果这些语言服务器中的一些是基于 Volar.js 的,可能有一些方法让他们决定只激活一个语言服务器,然后将其余语言服务器的功能共享给激活的服务器,这样最终只需要在一个语言服务器实例而不是多个语言服务器中运行 TypeScript 语言服务。

这也可以解决 TypeScript 插件无法支持的一些用例。

基于 Volar.js 架构,已经非常接近这个目标,Volar 团队将为 Vue 和 Astro 语言服务器探索这个特性。

Rules API(内置 Linter)

在 ESLint 和 Prettier 一起使用时可能会出现冲突,而过去基于 Plugin API 的尝试并没有很好地避免这个问题。

Rules API 是避免不同 linting 工具之间冲突的另一种尝试,同时也确保性能和特性与 IDE 完美集成。

对于元框架,它们需要为 ESLint 和 Prettier 实现自己的解析器,但是有了 Rules API,它们甚至不需要这样做,因为可以重用 Volar 语言服务器的解析器。

因此,如果编写了一个 TS 规则,它将直接通过 Rules API 用于 Vue 的 <script> 和模板中的 TypeScript 代码,而不需要额外的解析器。

这并不意味着需要重写所有规则;Rules API 只是一个 API,而不是一个单独的 linter,因此仍然可以重用 ESLint、TSLint 甚至 Rome 中的一些规则。

Scripts API

对于 Vue,有 Vue-tsc 来检查TS代码,Volar 团队也想在 CI 中同时检查 CSS 和 Vue Template 代码。

Scripts API 旨在公开语言服务器的格式化和 linting 功能,以便它们可以在脚本中使用,允许开发者在 CI 或 git 预提交 Hooks 中使用它并获得与在 IDE 中相同的结果。

相关链接

[1]

Volar.js: https://volarjs.github.io/

[2]

vuejs/language-tools: https://github.com/vuejs/language-tools

[3]

Vite: https://vitejs.dev/

[4]

plugins: https://github.com/volarjs/plugins

[5]

volarjs.github.io: https://volarjs.github.io/

[6]

language-tools-starter: https://github.com/volarjs/language-tools-starter

[7]

ecosystem-ci: https://github.com/volarjs/ecosystem-ci

[8]

pug-language-tools: https://github.com/volarjs/pug-language-tools

[9]

angular-language-tools: https://github.com/volarjs/angular-language-tools

[10]

svelte-language-tools: https://github.com/volarjs/svelte-language-tools

Vue.js 官方 IDE/TS 支持工具 Volar:新的开始相关推荐

  1. Vue.js 官方团队成员霍春阳新作,深入解析 Vue.js 设计细节

    霍春阳(Hcy),Vue.js 官方团队成员.专注于 Web 研发领域,是 Vue.js 3 的核心贡献者之一,Vue.js 文档生成工具 Vuese 的作者,技术社区活跃者,曾撰写大量颇受好评的技术 ...

  2. Vue.js 官方团队成员霍春阳新作,深入解析 Vue.js 设计细节【文末送书】

    霍春阳(Hcy),Vue.js 官方团队成员.专注于 Web 研发领域,是 Vue.js 3 的核心贡献者之一,Vue.js 文档生成工具 Vuese 的作者,技术社区活跃者,曾撰写大量颇受好评的技术 ...

  3. vue.js 添加 fastclick的支持

    fastclick:处理移动端click事件300毫秒延迟. 安装: 先执行安装fastclick的命令. npm install fastclick -S 之后,在main.js中引入,并绑定到bo ...

  4. Vue CLI 脚手架详解:快速构建 Vue.js 项目的利器

    目录 一.安装和创建项目 二.项目结构 三.开发和构建 四.插件和配置 Vue CLI 是 Vue.js 官方提供的脚手架工具,它可以帮助开发者快速搭建 Vue.js 项目的基础结构,并提供了丰富的功 ...

  5. Vue.js 介绍及其脚手架工具搭建

    vue.js介绍 (MVVM.核心思想) vue.js 是一套轻量级的 MVVM 的渐进式框架.Vue 的核心库只关注视图层. vue.js 的官方网址是:点我,我是网址 MVVM 介绍 MVVM 全 ...

  6. 5个测试Vue.js程序的有用工具和库

    原文 | https://blog.bitsrc.io/5-useful-tools-and-libraries-for-testing-vuejs-applications-13166f930da8 ...

  7. vue.js 2.x教程

    教程 基础 安装 兼容性 Vue 不支持 IE8 及以下版本,因为 Vue 使用了 IE8 无法模拟的 ECMAScript 5 特性.但它支持所有兼容 ECMAScript 5 的浏览器. 更新日志 ...

  8. mpvue 微信小程序_使用Vue.js开发微信小程序:开源框架mpvue解析

    戳蓝字"CSDN云计算"关注我们哦! 作者 | 成全 责编 | 阿秃 转自 | 美团技术团队企业博客 前言 mpvue是一款使用Vue.js开发微信小程序的前端框架.使用此框架,开 ...

  9. vue 3.0和2.0区别_一文看懂 Vue.js 3.0 的优化

    Vue.js 从 1.x 到 2.0 版本,最大的升级就是引入了虚拟 DOM 的概念,它为后续做服务端渲染以及跨端框架 Weex 提供了基础. Vue.js 2.x 发展了很久,现在周边的生态设施都已 ...

最新文章

  1. AR + ROS +UBUNTU16.04+ORB-SLAM2
  2. 大文件上传服务器:支持超大文件HTTP断点续传的实现办法
  3. Javascript简单教程汇总
  4. 阿里巴巴集团成为国家信息安全漏洞库(CNNVD)技术支撑单位
  5. 主成分分析法_探索主成分分析法
  6. oracle循环语句小结
  7. 苹果cmsV10教程
  8. Redis运行时突然不能读取数据了
  9. linux的vps主机安装图形界面并远程访问
  10. 多媒体——视频——利用视频视图VideoView播放视频
  11. mysql 数据库军规_MySQL 数据库开发的 36 条军规
  12. 微信微博聊天记录可作为证据 如何防止聊天记录被恶意利用?可以使用BTchat链语阅后即焚功能
  13. Xilinx XDMA 上位机应用程序控制逻辑
  14. 【必看】分析各大招聘网站
  15. 弘辽科技:拼多多投产比(ROL)怎样计算?如何提高ROL
  16. Java IO流 详解(字节流、字符流、输入流、输出流、刷新)
  17. HTML转义字符对照表,HTML特殊字符转义,<转义,>转义,空格转义,“转义
  18. 我的理想600字作文计算机方面,我的理想600字作文「8篇」
  19. 法克packrec(重整思路。。)
  20. 中软国际与汇川技术全面战略合作 全球首款OpenHarmony工业智能操作系统正式启动

热门文章

  1. 三菱PLC与第三方设备TCP通讯_【深度分析】一台威纶通触摸屏与多台三菱PLC通讯...
  2. 整理一下 System.Linq.Enumerable 类中的那些比较少用的方法
  3. Validator.js 很好用的客户端表单验证
  4. 基于Airtest抖音养号源代码
  5. JDK:MAC系统配置多版本的JDK
  6. 照妖镜验号API接口(2023.4月更新接口文档)
  7. python路径中有变量的写法
  8. Python编程基础:鸡兔同笼问题。假设共有鸡、兔30只,脚90只,求鸡、兔各有多少只。
  9. Java 微信支付通知处理思路
  10. sklearn_数据预处理和特征工程