在升級 Vue 3 的過程中,Vue 團隊有一些做的不好的地方,也從中吸取了一些教訓(xùn)。
首先,每個變更都可能引發(fā)許多小的破壞性修改。盡管看似可以單獨管理每項變更,但由于變更之間存在關(guān)聯(lián),因此復(fù)雜性呈指數(shù)級增長。
由此認識到:
長遠來看,這些策略對于 Vue 的發(fā)展至關(guān)重要。在短期內(nèi),Vue 不會考慮任何重大變化,而是專注于改進和優(yōu)化現(xiàn)有的功能。未來,希望 Vue 3 能夠成為一個穩(wěn)定的基礎(chǔ),為 Vue 的進一步發(fā)展提供堅實的基礎(chǔ)。
第二個錯誤是低估了 Vue 3 升級對生態(tài)系統(tǒng)庫的影響。Vue 團隊原本認為,在面臨如此巨大的工作量時,庫的開發(fā)者不需要將他們的現(xiàn)有庫調(diào)整為 Vue 3 的兼容版本。
結(jié)果是,當(dāng) Vue 3 進行了許多內(nèi)部 API 和其他內(nèi)部行為的變更時,依賴這些內(nèi)部行為的大型庫升級到 Vue 3 變得非常困難。這導(dǎo)致了主要生態(tài)系統(tǒng)庫(如 Nuxt 和 Beautify)的升級過程變得漫長而復(fù)雜。
由此認識到:生態(tài)系統(tǒng)依賴性至關(guān)重要。
為了有效應(yīng)對這些潛在問題,Vue 引入了一個生態(tài)系統(tǒng)自動化持續(xù)集成系統(tǒng),該系統(tǒng)專門針對 Vue 核心的下游生態(tài)系統(tǒng)依賴和依賴 Vue 的下游項目進行測試。
目前,已經(jīng)成功集成了超過 15 個項目,未來還將繼續(xù)增加。在每次提交變更之后,該系統(tǒng)都會對所有下游庫進行測試,確保在發(fā)布前就能發(fā)現(xiàn)潛在的問題。一旦發(fā)現(xiàn)問題,可以與這些生態(tài)系統(tǒng)庫的作者合作,解決可能出現(xiàn)的兼容性問題。
除此之外,Vue 團隊希望明確禁止使用內(nèi)部 API,因為他們發(fā)現(xiàn)這些內(nèi)部 API 是導(dǎo)致庫子組使用 Vue 時遇到困難的主要因素。
幸運的是,隨著 TypeScript 在大多數(shù)項目中的普及,現(xiàn)在可以在類型級別和運行時級別實施這種禁止。對于官方工具或庫,仍需要公開一些內(nèi)部 API 以實現(xiàn)連接。然而,對于無法直接控制的生態(tài)系統(tǒng)庫,將逐步從類型定義中移除這些私有 API,以確保如果這些庫試圖使用它們時就會引發(fā)錯誤。
第三個錯誤就是:分開發(fā)布。Vue 3 核心在 2020 年 9 月發(fā)布,然而許多生態(tài)系統(tǒng)組件仍在開發(fā)中。初期文檔存在一些問題,并且 composition API 沒有在文檔中作為首要概念進行介紹。在 Vue 核心穩(wěn)定版發(fā)布時,官方庫、遷移構(gòu)建和開發(fā)工具支持尚未完善。
Vue 團隊之所以這樣做,是因為認為這些功能很重要,能夠盡早推出,以鼓勵生態(tài)系統(tǒng)中的庫和開發(fā)者開始嘗試和使用新的功能。這樣做的結(jié)果就是,在沒有完整的生態(tài)系統(tǒng)支持的情況下發(fā)布,給很多早期采用者帶來了困惑。
尤雨溪表示,在一個重大發(fā)布中,重要的是要確保一切都準(zhǔn)備就緒,而不是匆忙發(fā)布。
更重要的是,在發(fā)布大型版本之前,需要積極主動地與利益相關(guān)者和生態(tài)系統(tǒng)合作,通過與庫維護者進行合作,收集反饋并提前升級項目。這種合作方式可以更加積極主動地推動生態(tài)系統(tǒng)的改進和發(fā)展。如果希望在未來實現(xiàn)更大的變更,這一點是必須要改進的。
當(dāng)然,在升級 Vue 3 的過程中,也有很多好的做法,下面就來詳細看一看。
使用 TypeScript 是最正確的做法之一。
現(xiàn)在,類型檢查已成為前端解決方案的必備要素。當(dāng)我們審視主要的前端解決方案時,可以發(fā)現(xiàn) TypeScript 的集成和支持已成為人們首要關(guān)注的事項。
采用 TypeScript 已被證明在長期項目和大型團隊環(huán)境中顯著提高了代碼的可維護性。在 Vue 的代碼庫中使用 TypeScript 也極大地增強了 Vue 自身的可維護性,為未來的迭代和擴展打下了堅實的基礎(chǔ)。
第二個正確的做法是采用了組合式 API。最初這受到了人們的質(zhì)疑,但對于 Vue 來說效果非常好。引入組合式 API 時,它受到了 React hooks 的啟發(fā),但是它根植于 Vue 自己的響應(yīng)性系統(tǒng)。
實際上,仍然有人喜歡 Options API,但它存在一些組合式 API 沒有的限制。這部分原因是 Vue 的用戶群體已經(jīng)發(fā)生了變化。在早期,大多數(shù)用戶關(guān)注的是小到中型使用案例,重點是易于集成到現(xiàn)有的后端系統(tǒng)中。但隨著時間的推移,Vue 的維護者們看到用戶構(gòu)建了更復(fù)雜和要求更高的使用案例,以及大規(guī)模單頁面應(yīng)用。
為了讓 Vue 適應(yīng)不斷變化的用戶群體和行業(yè)需求,我們必須提出一些解決新問題的新方法,其中可擴展性是其中一個主要問題。因此,組合式 API 本質(zhì)上是為了解決這種可擴展性問題而發(fā)明的,旨在提供一種解鎖這種可擴展性的方法,同時盡可能地保留根植于 Vue 的用戶友好性。雖然在早期有很多爭議,但 Vue 團隊的決策最終被證明是正確的。
那些采用組合式 API 的開發(fā)者發(fā)現(xiàn)它確實有很多好處。組合式 API 的出現(xiàn)也催生了強大的社區(qū)努力,例如 VueUse,它提供了一系列極其有用的實用程序,解決了許多問題。這些問題并不適合包含在 Vue 核心中,但社區(qū)很好地解決了這些問題。事實上,VueUse 可能是直接由組合式 API 帶來的最大好處之一。
Vue 在開發(fā)者體驗方面做出了明智的選擇,這一點也得到了回報。這一選擇促成了備受歡迎的 Web 構(gòu)建工具 Vite 的誕生,它源自一個專為 Vue 開發(fā)的開發(fā)服務(wù)器原型。如今,許多框架都在利用 Vite,包括 Nuxt。
Vue 對其 IDE 方面的投資也已經(jīng)取得了豐厚的回報,形成了一個擴展的生態(tài)系統(tǒng),使 Web 開發(fā)人員受益良多。這些 IDE 投入催生了 Volar 的誕生,它是一個子項目的總稱,涵蓋了 Vue 語言服務(wù)器和 Vue TSC。Vue TSC 是一個命令行界面,它包裝了 TypeScript,并為 Vue 組件提供了命令行時間檢查功能。
這套工具最初僅為 Vue 而設(shè)計,類似于 Vite,但現(xiàn)在已經(jīng)擴展成為一個工具集生態(tài)系統(tǒng),幫助其他框架構(gòu)建更出色的 IDE 和 TypeScript 支持。Volar 目前正逐步轉(zhuǎn)變成一個框架無關(guān)的核心,不僅支持 Vue,還支持 Astro、MDX 等其他可能采用它的框架。
這是 Vue 生態(tài)系統(tǒng)所獨有的現(xiàn)象,我們看到很多源自生態(tài)系統(tǒng)的創(chuàng)新理念開始產(chǎn)生比 Vue 生態(tài)系統(tǒng)更大的影響。
Vue 3 成功實現(xiàn)了他們設(shè)定的目標(biāo),包括提供更好的性能、更強大的類型支持、更優(yōu)秀的可擴展性和更優(yōu)的開發(fā)者體驗。隨著 Vue 2 的支持在本月結(jié)束,Vue 3 的下載量已經(jīng)接近 Vue 總下載量的 48.8%。在過去一年中,Vue 3 的采用率幾乎翻了一番。這表明 Vue 3 在迅速贏得開發(fā)者的青睞和信任,并在前端開發(fā)領(lǐng)域產(chǎn)生了深遠的影響。
本文鏈接:http://www.www897cc.com/showinfo-26-50750-0.html尤雨溪:Vue 3 開發(fā)中的經(jīng)驗和教訓(xùn)
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com