Vue 3是一個錯誤,我們不應該再犯
文本是翻譯的,作者Fotis Adamakis, 他是 Vue.js雅典會議的共同組織者,文中的第一人稱指的是該大佬。
從最初引入Vue 3開始,已經過去了4年多。經過多次RFC的討論,以及其他現代框架(包括React和Svelte)的影響,Vue 可能已經成為最強大和最全面的框架,能夠逐步支持任何規模和架構的應用。
聽起來很刺激,對嗎?嗯,事實遠非如此。從那時起,就發生了很多延遲和降級的情況。盡管Vue 3最近成為了新的默認版本,但很多重要的支持庫還沒有準備好,甚至沒有計劃與兩個版本兼容。這說明很多代碼庫還停留在Vue 2上,遷移到版本3的路徑并不容易。
請不要誤解我,Vue 3非常棒。它可能是目前最好的框架了。但事實上,從第二版開始沒有簡單的遷移路徑,這是一個錯誤,我們不應該在未來重復。
Vue 2的問題
Vue一直被認為是一個進步的框架。選項API很容易理解,我們可以學習并在需要時引入更復雜的模式和庫。小的學習曲線和良好的文檔是大家喜歡它的原因。
另一方面,在將通用邏輯抽象為mixin時,使用繼承而不是組合的體系結構缺陷造成了許多可伸縮性問題,并破壞了干凈組件聲明的許多原則。Vue3 引入組合API 作為一種解決方案。
另一個重要的問題是對typecript的支持。當然,在Vue組件中編寫typescript就像在script標簽中添加type="ts"一樣容易。但在模板和 store 里,支持是有問題的。
vue3 解決方案
完全重寫是一個改善框架內部結構的機會。Vue3 廣泛地使用了Typescript,包括響應性機制在內的許多方面都從頭開始。這使得Vue 3在數據包大小、初始渲染、更新和內存使用方面的性能得到了明顯的改善。
此外,還增加了很多新的功能。
- Composition API
- 語法糖<script setup>
- Fragments
- Emits Component Option
- 來自@vue/runtime-core的createRenderer API可以創建自定義渲染器
- style 里面可以綁定變量
- SFC的<style scoped>現在可以包括全局規則或只針對插槽內容的規則
- Suspense
新功能改善了整體的開發體驗,歡迎很多開發都的追捧。爭論的焦點是,其中大部分功能,包括組合API、teleport、 suspense 等,在Vue 2中已經都能用了,所以它們不能真正算作框架的改進。
真正的問題
破壞的性變化,有很多。其中一些很簡單,比如Events API。Vue實例不能再用作事件總線,但有即插即用的解決方案,如 mitt 或 tiny-emitter,可以用作直接替代。這需要有一定工作時間,但可以及時完成,沒有太多風險。
另一方面,有些變化不能安全地進行,也不能不進行小規模或大規模的重構。在一個用Vue 2構建的現有大型應用中,你可能會使用一些被廢棄或改變的API。
遷移構建應該是兩個版本之間的橋梁,但由于有這么多被廢棄的功能,它對大型項目并不適用。此外,官方對一些基本的支持庫的建議是遷移到另一個不同的庫,這進一步增加了復雜性。由于有這么多的移動組件,即使遷移構建成功,也需要大量的工作,這對大項目來需要有更多的時間用來解決技術債務。
不需要的東西
Vue始終是一個有意義的框架。你可以試著猜測一個API應該如何工作,你很可能是對的。Vue 3不再是這種情況。
一個例子是關于新的基于函數的Vue組件編寫方式的意見征集,有大量的回應,包括正面和負面的。不管你在這場爭論中的立場如何,將社區分成兩半絕不是一個好兆頭。
文檔
在開發過程中,特別是在一個新的框架中,谷歌和StackOverflow是你最好的朋友。目前,Vue 2的答案占據了壓倒性的優勢,但在Vue 3中,很多API實現的原理都不一樣了,因此可能會造成一定的混亂。
生態
一個框架有多強大,它的生態系統就有多強大。有爭議的決定和不負責任的廢棄功能驅使許多貢獻者離開,導致許多庫被放棄。但是,當你沒有給開源庫一個可行的方法來支持兩個版本的時候,就指責他們沒跟上你的版本時,這表明你缺乏同情心和對大局的理解。
一個框架的真正力量來自于它周圍的社區和生態系統。
過去
如果你有幸在2015年前后寫代碼,你有可能會使用當時最主流的框架AngularJS。
轉到 Vue 3的看起來很像從 AngularJS 到 Angular(版本1?2)的過渡。大量的破壞性的變化導致了挫敗感,最終Angular失去了對React和Vue的吸引力。
如果你是一個全棧工程師,你可能熟悉大約10年前在Python生態系統中發生的同樣情況。在大約十年的時間里,許多項目無法升級,因為許多核心庫沒有增加對Python 3的支持,而出現的新庫只支持Python 3。當然,后來的Python版本開始只在版本3上添加新的和閃亮的功能,這種混亂的情況還沒有真正結束。
未來--這種情況會再次發生嗎?
看起來前進的方向是向后退,把所有的東西都移植到遷移構建中,但是損害已經造成了,開發滿意度看起來并不樂觀,不能忽視。有遠見地讓框架參與進來是合理的,但開發經驗是框架的核心職責之一。Vue 4應該考慮到整個生態系統,并提供一個遷移路徑,否則它將成為沒有人愿意使用的最佳框架。
到目前為止,你對Vue 3的遷移有什么經驗?請在評論中分享你的想法和建議。
作者:Chris 譯者:小智 來源:medium 原文:https://fadamais.medium.com/vue-3-was-a-mitake-that-we-should-not-repeat-81cc65484954