前端LSP真是越來越多了
大家好,我是卡頌。
前端領(lǐng)域發(fā)展多年,不僅沒有式微,反而勢力逐漸擴(kuò)大。
一個(gè)直觀的現(xiàn)象:市場上「前端」、「后端」崗位需求一直居高不下,與「前端」同樣偏「前」的原生開發(fā)(IOS、安卓)則逐漸式微。
雖然「前端」發(fā)展迅猛,但是太陽底下沒有新鮮事,web前端終將走過「原生應(yīng)用程序」曾經(jīng)走過的路。
如果以史為鑒,那么一個(gè)趨勢是不可阻擋的 —— 前端會越來越「左」。
本文內(nèi)容參考Language Servers are the New Frameworks[1]以及Compilers are the New Frameworks[2]
什么是“左”?
IBM曾發(fā)明一個(gè)計(jì)算機(jī)術(shù)語Shift Left[3](左移)。
對開發(fā)者來說,「開發(fā)」這一行為可以分為不同階段:
Read(肉眼看到我們編寫的代碼出現(xiàn)在屏幕上時(shí))
- Save(保存代碼時(shí))
- Commit(提交代碼時(shí))
- Build(編譯代碼時(shí))
- Run(運(yùn)行代碼時(shí))

當(dāng)開發(fā)者的注意力越向左,越能盡早發(fā)現(xiàn)bug(即「左移」)。舉兩個(gè)極端例子:
- 對于Read,依賴于TS的靜態(tài)分析,在編寫代碼的同時(shí)就能知道類型推導(dǎo)相關(guān)的錯(cuò)誤
- 對于Run,某些bug可能要運(yùn)行好幾天,用戶反饋過來才知道
所以,對于成熟的開發(fā)體系,開發(fā)者的注意力肯定會更多放在「左邊」。
為了賦予開發(fā)者更多支持,前端「基建」會越來越偏左。
從Run到Build
「前端框架」的發(fā)展是個(gè)明顯的例子:
中世紀(jì)
作為前端領(lǐng)域第一大框架,jQuery是絕對的運(yùn)行時(shí)方案,他幫助開發(fā)者在代碼運(yùn)行時(shí)抹平瀏覽器的差異。
jQuery yyds
近代
到了React、Vue,都需要引入編譯能力。
React需要編譯JSX,Vue需要編譯模版語法。
現(xiàn)代
前段時(shí)間StackOverflow公布的《2021年開發(fā)者報(bào)告》中最受歡迎的前端框架Svelte更是打出了「零運(yùn)行時(shí)」的口號。

從Build到Read
但是,Build畢竟不是最偏左的,有沒有從Build直接往Read(最左邊)發(fā)展的呢?
有,這就是LSP(Language Server Protocol,即語言服務(wù)協(xié)議)。

當(dāng)然,不是這個(gè)LSP
LSP是編輯器和語言工具(例如linter、靜態(tài)類型檢查、代碼風(fēng)格檢查)之間進(jìn)行通信的標(biāo)準(zhǔn)協(xié)議。
沒有LSP,不同語言需要實(shí)現(xiàn)這些工具與不同編輯器的通信。

有了LSP,他就能作為語言與編輯器之間溝通的橋梁。
對于前端領(lǐng)域,不同前端框架都在積極探索LSP方面的可行性,比如:
- Vetur[4]作為Vue針對VSCode的工具集,是Vue開發(fā)者的標(biāo)配
- 相比Vue的模版語法,React直接寫JS可以獲得更好的靜態(tài)類型分析。
雖然Hooks在書寫上有些規(guī)則限制,但是React通過Hooks相關(guān)lint很好規(guī)避了開發(fā)者書寫錯(cuò)誤Hooks的可能性。
同時(shí),所有Hooks有統(tǒng)一useXXX的前綴也為未來進(jìn)一步的編譯時(shí)分析提供可能。
- Angular也提供了Angular Language Service[5]
- TailwindCSS提供了Tailwind CSS IntelliSense

總結(jié)
這些趨勢對于普通業(yè)務(wù)開發(fā)同學(xué)來說,意味著:未來會有越來越多前端工具提供「編譯工具」、「IDE插件」,現(xiàn)在有「webpack配置工程師」,未來可能需要團(tuán)隊(duì)專屬「IDE配置工程師」。
對于想錯(cuò)位競爭的前端同學(xué),可以學(xué)習(xí)LSP相關(guān)知識,未來走大廠基建崗位。
參考資料
[1]Language Servers are the New Frameworks:
https://dev.to/dx/language-servers-are-the-new-frameworks-1lbm
[2]Compilers are the New Frameworks:
https://tomdale.net/2017/09/compilers-are-the-new-frameworks/
[3]Shift Left:
https://devops.com/shift-left-can-you-be-left-out/
[4]Vetur:
https://github.com/vuejs/vetur
[5]Angular Language Service:
https://github.com/angular/vscode-ng-language-service