為什么人們還沒有轉(zhuǎn)向Svelte
Svelte是一個輕量級的基于組件的框架,比如React、Vue或Angular也都是,它允許開發(fā)人員用JavaScript編寫易于閱讀的代碼,然后將編寫的代碼編譯成在瀏覽器中運行速度超快的高效JavaScript。
當(dāng)其他框架(如React)采用虛擬DOM diffing技術(shù)時,Svelte將你的代碼編譯成JavaScript,當(dāng)你的組件中的狀態(tài)變化時,DOM就會更新。
自從2016年11月由Richard Harris首次發(fā)布以來,很多開發(fā)者都愛上了這種新的構(gòu)建應(yīng)用的方法,在其官方Github倉庫上有超過3.9萬顆星,并在頂級JavaScript前端框架的選擇中爭得一席之地。
盡管有這些數(shù)據(jù),但是,很多人在前端開發(fā)過程中都在猶豫要不要采用Svelte這個框架。
根據(jù)trends.buildwith.com的數(shù)據(jù),截至2020年10月,總共只有約6000個注冊的直播和歷史網(wǎng)站使用Svelte作為首選前端庫。相比React的340萬左右、Vue的150多萬、Angular的370多萬,這個數(shù)據(jù)是超低的。
為什么開發(fā)人員尚未切換到Svelte
(1) 遲來的TypeScript支持
例如,當(dāng)你從Angular這樣的框架中走出來時,你會很習(xí)慣于開箱即為你預(yù)置一個TypeScript開發(fā)環(huán)境。Svelte團隊在2020年7月才剛剛發(fā)布了包含官方支持TypeScript的更新。
這意味著開發(fā)者現(xiàn)在可以在創(chuàng)建Svelte項目時運行以下命令來設(shè)置TypeScript:
- npx degit sveltejs/template svelte-typescript-app
- cd svelte-typescript-app
- node scripts/setupTypeScript.js
雖然事先可以使用TypeScript,但最初的設(shè)置過程相當(dāng)繁瑣,因為它涉及到一堆耗時的自定義Webpack和Svelte預(yù)處理配置。Svelte現(xiàn)在默認包含TypeScript支持,這是一件好事,因為這個主要的缺失點似乎是阻礙開發(fā)者學(xué)習(xí)和使用該框架的因素之一。前段時間Deno正式發(fā)布的時候,在開發(fā)者中考慮到的一個關(guān)鍵賣點就是它比Node的TypeScript集成優(yōu)勢。
(2) 沒有官方的CRA或Svelte CLI
如果你需要快速構(gòu)建一個React應(yīng)用的腳手架,你可以很容易地使用create-react-app CLI應(yīng)用(鑒于它已在全球范圍內(nèi)安裝),只需運行 create react app myreactproject 命令就會自動為你生成應(yīng)用腳手架。
對于Vue來說,過程是類似的,只要你的機器上安裝了Vue CLI,你只需要運行這個命令,你的腳手架就設(shè)置好了。
- vue init myvueproject
然而Svelte并沒有官方維護的腳手架項目的CLI應(yīng)用,因為 svelte/cli 包已經(jīng)在2018年被廢棄。
你需要總是從它的 npx 倉庫(已經(jīng)集成了 CLI)中提取腳手架模板。這意味著,每次你想創(chuàng)建一個Svelte應(yīng)用程序時,你需要始終運行以下命令來設(shè)置一個Svelte項目。
- npx degit sveltejs/template my-svelte-project
- cd my-svelte-project
- npm install
- npm run dev
雖然這看似是一個小小的DX(開發(fā)者體驗)缺陷,但這絕對是Svelte團隊可以研究的問題。
(3) 小型社區(qū)
與其他主要的前端開發(fā)框架相比,Svelte擁有一個非常小的社區(qū)。如果您使用的是擁有大型社區(qū)的流行語言,那么您更有可能找到需要合作的人,你也更有可能找到參考資料和資源。
比如在Stack Overflow上,Svelte標(biāo)簽下提出的討論(問題和答案)只有一千多條。相比React的25萬+、Angular的23.4萬+、Vue的6.4萬+分別來說,還有很多工作要做。這意味著,如果你作為開發(fā)者在使用Svelte時遇到問題,得到幫助的機會相對較小。
(4) 更少的包裝/工具支持
很多開發(fā)者發(fā)現(xiàn),整合現(xiàn)有的包,有助于更快地實現(xiàn)任務(wù)。由于Svelte的普及率比較低,所以包和實用程序的支持比較少。例如,如果你想在React中實現(xiàn)一個date-picker組件,在NPM倉庫中就有數(shù)百個包可供選擇。然而,對于Svelte您就沒有這樣的奢侈了,因為可供開發(fā)人員挑選的特性很少,因此,開發(fā)人員通常要花時間從頭開始實現(xiàn)這些特性。
(5) 行業(yè)需求低迷
如果雇主對一個工具有足夠的需求,開發(fā)人員學(xué)習(xí)這個工具是有道理的。作為一名開發(fā)人員,如果學(xué)習(xí)一種工具有利可圖的話,您會希望獲得它的知識。
Svelte在JavaScript世界中比較年輕,因此,行業(yè)對Svelte開發(fā)人員的需求不大,因為很多公司的基礎(chǔ)設(shè)施中還沒有采用Svelte(還沒有)。
為什么企業(yè)還不轉(zhuǎn)用Svelte?
(1) 公司的支持
React得到了Facebook的大力支持,因為最初開發(fā)它的是Facebook內(nèi)部員工,Angular的開發(fā)團隊由谷歌的開發(fā)人員領(lǐng)導(dǎo),他們也在自己的職業(yè)網(wǎng)站上使用Vue。比如蘋果,在他們的SwiftUI教程網(wǎng)站中也使用了Vue。然而Svelte并沒有(還沒有)得到這些大型科技公司的明顯支持。我堅信,如果Svelte獲得這些公司的支持,將會有更多的公司開始采用Svelte。如果這些公司中的任何一家在其基礎(chǔ)設(shè)施中采用或支持該框架,Svelte的受歡迎程度可能會飆升。
(2) 成熟度
如果一項技術(shù)存在的時間較長,那么它就會被認為比其對應(yīng)的技術(shù)更可靠,因為隨著時間的推移,技術(shù)會隨著錯誤修復(fù)、更多的文檔和教程、語言語法和安全性的改進等方面而不斷改進。
由于Svelte(2016年發(fā)布)在前端框架領(lǐng)域比React、Vue、Angular等年輕,相對較新,所以對其成熟度存在一定程度的擔(dān)憂是很正常的。相信不少公司因為Svelte的年齡,對采用Svelte構(gòu)建產(chǎn)品的安全性持懷疑態(tài)度。
(3) 最后
從目前的流行程度和有用性來看,毫無疑問,Svelte是未來web開發(fā)的重要組成部分。作為一個Svelte開發(fā)者,如果能有更多的公司和開發(fā)者采用Svelte及其所有的美感,作為他們制作Web應(yīng)用的前端Web框架的選擇,那將是一件非常棒的事情。