5號(hào)凌晨继榆,尤雨溪公布了Vue3源代碼巾表。
源碼地址:https://github.com/vuejs/vue-next
vue-next汁掠,顧名思義,下一個(gè)Vue集币。它的status是Pre-Alpha考阱,解釋一下,產(chǎn)品發(fā)布周期的一個(gè)版本鞠苟,一般是在alpha之前發(fā)布乞榨。也有人叫Development Release、Technical Preview(技術(shù)預(yù)覽版)等偶妖。
功能非常不完善姜凄,有時(shí)候會(huì)有較嚴(yán)重的BUG出現(xiàn)政溃,因?yàn)樗钦麄€(gè)軟件發(fā)布周期中的第一個(gè)階段趾访,所以它的名稱是"Pre-Alpha",希臘字母中的第一個(gè)字母alpha前面加上Pre表示alpha之前董虱。
也就是說這次公布的是預(yù)覽版扼鞋,正式版可能要等到明年,才能與大家見面愤诱。
話不多說接下來我們談?wù)勛兓糠?/p>
Typescript
Vue3.0使用 TypeScript 重構(gòu)云头,如果你還在猶豫是否去了解 TypeScript,這就是你最好的理由淫半,相信我你會(huì)愛上他溃槐。
Proxy
Vue2.x 中,實(shí)現(xiàn)數(shù)據(jù)的可響應(yīng)科吭,需要對(duì) Object
和 Array
兩種類型采用不同的處理方式昏滴。 Object
類型通過 Object.defineProperty
將屬性轉(zhuǎn)換成 getter/setter
,這個(gè)過程需要遞歸偵測(cè)所有的對(duì)象 key
对人,來實(shí)現(xiàn)深度的偵測(cè)谣殊。
觀測(cè) Array
對(duì)象的變化,需要對(duì) Array
原型上幾個(gè)改變數(shù)組自身的內(nèi)容的方法做了攔截牺弄,這種模式一般稱為代理原型。(原理不再此做過多的闡述
Vue3.0實(shí)現(xiàn)方式是通過 ES6
提供的 Proxy API
蛇捌,相比舊的 defineProperty
API 咱台,Proxy
可以代理數(shù)組&對(duì)象吵护。
reactivity
Vue3 項(xiàng)目結(jié)構(gòu)采用了 lerna 做 monorepo
風(fēng)格的代碼管理表鳍,稍微介紹下什么是monorepo譬圣。
之前項(xiàng)目迭代更新的時(shí)候雄坪,通常的做法是把一個(gè)大的codebase拆成一些獨(dú)立的package或是module,再將這些功能獨(dú)立的package分別放入單獨(dú)的repository中進(jìn)行維護(hù)绳姨∑可以簡(jiǎn)單地稱這種方式為multiple repositories购撼。
而monorepo則是一種相反的做法,它提倡將所有的相關(guān)package都放入一個(gè)repository來管理碾盐。
這樣比較顯著的特征是項(xiàng)目中會(huì)有個(gè) packages/
的文件夾揩局。
Vue2.x的版本響應(yīng)系統(tǒng)凌盯,數(shù)據(jù)觀測(cè)的核心代碼都放在了** observer**中。
Vue3.0 reactive.ts文件励背,它提供了reactive函數(shù)砸西,該函數(shù)實(shí)現(xiàn)響應(yīng)式數(shù)據(jù)觀測(cè)。
packages 目錄導(dǎo)讀
├── compiler-core ------------------------------- 參照之前的Vue2.X entry-runtime.js 運(yùn)行時(shí)構(gòu)建的入口衅疙,不包含模板(template)到render函數(shù)的編譯器
├── compiler-dom ---------------------------------- 參照之前的Vue2.X entry-runtime-with-compiler.js 獨(dú)立構(gòu)建版本
├── reactivity ------------------------------ 響應(yīng)式系統(tǒng) 數(shù)據(jù)觀測(cè)核心代碼
├── runtime-core ---------------------------------- 與平臺(tái)無關(guān)的運(yùn)行時(shí)代碼,Virtual-dom Vue component相關(guān)代碼
├── runtime-dom ------------------------------ 針對(duì)瀏覽器的 runtime 相關(guān)代碼
├── runtime-test ----------------------------------為了測(cè)試而寫的輕量級(jí) runtime
├── server-renderer ----------------------------------- SSR
├── shared ----------------------------------- 可忽略
├── vue ----------------------------------- 用于構(gòu)建「完整構(gòu)建」版本饱溢,引用了上面提到的 runtime 和 compiler
├── global.d.ts ----------------------------------- 不解釋
更多的源碼細(xì)節(jié)后續(xù)更新绩郎。