新聞中心
Volar 是 Vue.js 官方的 VSCode 擴展。當官方推薦 Vetur 時,Volar 還是一個個人項目,隨著時間的推移,由于改進的性能和體系結(jié)構(gòu)而被采納為新的官方擴展。作為一個旨在改善開發(fā)體驗的項目,用了兩年多的時間才達到了 1.0 版本,并且一直在不斷改進穩(wěn)定性。但還有許多工作要做,2023 年有更令人興奮的計劃!

創(chuàng)新互聯(lián)公司,為您提供網(wǎng)站建設(shè)公司、成都網(wǎng)站制作、網(wǎng)站營銷推廣、網(wǎng)站開發(fā)設(shè)計,對服務(wù)成都混凝土攪拌站等多個行業(yè)擁有豐富的網(wǎng)站建設(shè)及推廣經(jīng)驗。創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)公司成立于2013年,提供專業(yè)網(wǎng)站制作報價服務(wù),我們深知市場的競爭激烈,認真對待每位客戶,為客戶提供賞心悅目的作品。 與客戶共同發(fā)展進步,是我們永遠的責(zé)任!
Volar.js:嵌入式語言工具框架
盡管最初是為 Vue 單文件組件的特定需求而設(shè)計的,但 Volar 的代碼庫包含許多不特定于 Vue 的部分,例如:
- 嵌入式編程語言的處理;
- Vue 語言服務(wù)器實際上是一個成熟的 TypeScript 語言服務(wù)器;
- 處理與 LSP / Web / 嵌入式語言服務(wù)等交互的代碼。
注:語言服務(wù)器并不是一個真的服務(wù)器,而是把語言相關(guān)的特性和功能從 IDE 中解耦出來,作為一個獨立的程序單獨運行,提供了例如引用查詢等功能的具體實現(xiàn)。
現(xiàn)在已經(jīng)將這些通用部分提取到一組與框架無關(guān)的工具中。這些工具現(xiàn)在作為一個新的獨立項目進行維護:Volar.js[1]。
Volar.js 的架構(gòu)支持任何涉及嵌入式語言的文件格式——不僅是 Vue,還包括 Astro、Svelte,甚至 Angular。它還能夠?qū)崿F(xiàn)常規(guī)的單語言 LSP servers,例如 TypeScript、CSS 和 HTML。
Volar.js 的另一個主要關(guān)注點是性能。它旨在最大限度地減少實現(xiàn)原生嵌入式語言服務(wù)性能的開銷。有很多問題和優(yōu)化機會,只有在擁有大量用戶的情況下才能發(fā)現(xiàn),而 Volar.js 是根據(jù)從數(shù)百萬次下載中積累的經(jīng)驗進行優(yōu)化的。
例如,字節(jié)跳動的 Lynx 團隊是 Volar.js 的早期采用者,一個開發(fā)人員用兩周的時間交付了一整套支持其內(nèi)部框架的語言工具。如果它是從頭開始構(gòu)建的,即使是一個團隊也需要幾個月的時間。
舊的 Volar 現(xiàn)在是 vuejs/language-tools
提取核心后,原始 Volar 擴展和 vue-tsc 的代碼庫已移至 vuejs/language-tools[2] 存儲庫。這個存儲庫現(xiàn)在依賴于 Volar.js 并包含對 Vue 特定支持的代碼。
除此之外,還將把一些 npm 包從 @volar 的 npm 組織轉(zhuǎn)移到 @vue。不過,這些變化不應(yīng)該影響用戶。
團隊與組織
?Vite[3] 從 Vue 生態(tài)系統(tǒng)中脫穎而出,并最終成長為自己的社區(qū),連接整個 Web 開發(fā)生態(tài)系統(tǒng)的用戶,Volar.js 也希望走同樣的路。
Volar 作者 Johnson Chu 與 Astro 核心團隊成員 Erika 建立了 Volar.js 核心團隊,致力于改善開發(fā)者體驗。團隊將共同努力,為所有 Web 開發(fā)者改進 DX,而不僅僅是 Vue 和 Astro。
他們創(chuàng)建了 volarjs 組織來維護框架和相關(guān)的存儲庫:
- volar.js:框架的核心
- plugins[4]: 可以在 volar.config.js 或框架的 plugins 中使用
- volarjs.github.io[5]:官方網(wǎng)站
- language-tools-starter[6]:開始使用 Volar.js 構(gòu)建語言服務(wù)器模板
- ecosystem-ci[7]:用于運行 volar 生態(tài)系統(tǒng)項目的集成測試
- 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 實現(xiàn),Volar 團隊計劃在框架中支持它,因此所有基于 Volar.js 的語言服務(wù)器都可以輕松使用它。
支持 VSCode 以外的 IDE
除了 VSCode 之外,許多貢獻者還為 Volar 的 Vim、Sublime、Atom、Emacs、Nova、Lapce 等其他 IDE 實現(xiàn)了語言客戶端。擁有一整套的 IDE 支持可能有很大的參考價值,因為很少有人能夠精通所有這些 IDE。
Volar 團隊將尋找方法來利用這些貢獻者的努力,以減少框架使用者在 VSCode 之外實現(xiàn)語言客戶端的工作量。
除此之外,雖然 IntelliJ 沒有一流的 LSP 支持,Volar 團隊將研究是否可以將其與框架集成。
基于 Bun 的語言服務(wù)器
理論上,Volar 的性能只能無限接近,但不會快于 vanilla TS 語言服務(wù)器。但是,如果 Volar 語言服務(wù)器可以通過在 Bun 中運行而獲得性能提升,它可能會改變游戲規(guī)則。
以前 Bun 運行時還不兼容基于 Node.js 的 LSP 服務(wù)器。Volar 團隊會持續(xù)關(guān)注相關(guān)問題,待問題解決后進行重試。同樣,所有基于 Volar.js 的語言服務(wù)器都將能夠直接從中受益。
單體服務(wù)器
想象一個場景,每種語言都需要支持一些 TypeScript 特性,那么每種語言的語言服務(wù)器都會運行自己昂貴的 TypeScript 語言服務(wù)實例,這讓情況變得變得糟糕,因為內(nèi)存和 CPU 使用率都會成倍增加,而這種情況如今已經(jīng)發(fā)生了。
如果這些語言服務(wù)器中的一些是基于 Volar.js 的,可能有一些方法讓他們決定只激活一個語言服務(wù)器,然后將其余語言服務(wù)器的功能共享給激活的服務(wù)器,這樣最終只需要在一個語言服務(wù)器實例而不是多個語言服務(wù)器中運行 TypeScript 語言服務(wù)。
這也可以解決 TypeScript 插件無法支持的一些用例。
基于 Volar.js 架構(gòu),已經(jīng)非常接近這個目標,Volar 團隊將為 Vue 和 Astro 語言服務(wù)器探索這個特性。
Rules API(內(nèi)置 Linter)
在 ESLint 和 Prettier 一起使用時可能會出現(xiàn)沖突,而過去基于 Plugin API 的嘗試并沒有很好地避免這個問題。
Rules API 是避免不同 linting 工具之間沖突的另一種嘗試,同時也確保性能和特性與 IDE 完美集成。
對于元框架,它們需要為 ESLint 和 Prettier 實現(xiàn)自己的解析器,但是有了 Rules API,它們甚至不需要這樣做,因為可以重用 Volar 語言服務(wù)器的解析器。
因此,如果編寫了一個 TS 規(guī)則,它將直接通過 Rules API 用于 Vue 的 ??


咨詢
建站咨詢