《Vue3.0搶先學》系列之一:趕緊起來!我還能學

今天開始,我想給大家講點新東西。大家不用大喊學不動,請放鬆心情隨意觀看,我也講不出什麼很深奧難學的東西,本系列文章都會是些比較淺顯易懂的家常內容。

話說前兩天,Vue 3.0的源碼終於出現在了Github的Vue官方項目倉庫中(https://github.com/vuejs/vue-next/),當前版本處於Pre Alpha狀態。終於見到了傳說中基於TypeScript編寫的新版Vue的代碼了,熱愛學習的我頓時一股學習熱情噴湧而出呀,第一時間抄起命令行,Clone下了源代碼:

git clone https://github.com/vuejs/vue-next.git

下載完代碼,稍微觀察了一下項目結構,發現這是一個組織成 monorepo 形式的工程(簡單來說也就是把多個相關子項目放在同一個Git倉庫中),使用的lerna這個工具進行管理。下面是源碼中packages下面的各個子項目模塊:

《Vue3.0搶先學》系列之一:趕緊起來!我還能學

其中幾個比較重要的模塊,先作一下簡要的介紹:

  • vue Vue項目的主入口模塊
  • reactivity 非常重要的模塊,實現Vue3.0的數據響應式功能的核心
  • compiler-core 模板核心語法編譯器,包括對標籤、屬性、指令(如v-if、v-for、v-bind、v-model、v-on、v-once、v-slot等)模板語法的解析
  • compiler-dom Vue模板編譯器,可編譯模板中其他功能性指令(如v-clock、v-html、v-text等)。依賴compiler-core
  • runtime-core 實現虛擬DOM、組件定義、生命週期、指令定義、依賴注入、渲染等功能的核心模塊


runtime-dom Vue瀏覽器DOM環境運行時,負責實現與瀏覽器環境運行所需的相關特性。依賴runtime-core

其中還有些模塊尚未開發完成,比如做服務端渲染(SSR)的server-renderer模塊。

初步瞭解了工程結構後,我還是花了不少的時間閱讀了一些關鍵性的代碼文件及單元測試,收穫還是不小,也澄清了之前的一些疑問,大致如下:

1. Vue3.0是一個全新的框架?Vue2.x的程序遷移到Vue3.0會比較困難?

不可否認,如果說從框架的實現層面來說,Vue3.0確實是一個全新的框架,框架的代碼實現全部採用了TypeScript來編寫,並且引入了一種和之前完全不同寫法的API:組合式API(Composition API)的接口函數,但是對於框架的使用者來說(使用Vue3.0開發自己應用的開發者),你以前的寫法仍然工作,Vue3.0提供了向下兼容,使得老項目的遷移變得更容易。

2. Vue3.0的響應式是採用的Proxy麼?
是的,新版框架的數據響應式核心組件不再使用Vue2.x時所採用的Object.defineProperty()方式來對數據變化進行跟蹤和觸發,而是採用了更高級的Proxy,據說擁有更好的性能,以及可以更好的支持對數組元素進行響應式處理,一掃Vue2.x在這方面的尷尬場面。不過,值得注意的是,絕大多數版本的IE瀏覽器是不支持Proxy的,如果需要進行兼容,我們可能需要引入相關polyfill。

3. 一定要用TypeScript來編寫代碼?
不是。框架構建後生成的是js文件,你還是可以像以前一樣使用Vue,比如直接在HTML文件中通過


分享到:


相關文章: