您好,登錄后才能下訂單哦!
寫在前面
最近又抽時間把 vue-next/runtime-core 的源碼陸陸續續地看完了,期間整理了很多筆記,但都是碎片化的。本來是想整理一下,寫成一篇文章分享出來的,但是感覺最終的成果物只能是一篇篇幅巨長的解析文,就算我一行一行的把源碼加上注釋,其閱讀體驗也會很差,因為每個人讀代碼的習慣不同,思路不同。正所謂拋磚引玉,所以,我覺的寫一篇向導文作為這塊磚應該是足夠了,希望可以幫助到想看源碼但覺得無從看起、無從下手的讀者。
另一方面,也算是給自己挖一個坑,因為這篇文章中涉及到的很多內容,三言兩語肯定是說不清的,這就意味著之后必須要寫其他文章來填補這些空白。我會盡可能的將高內聚的模塊整理到一起,然后再分享出來,盡量避免陷入羅列代碼的境地,從而提高文章質量吧。
閱讀筆記我托管在語雀上,不嫌亂的也可以看這里。
準備工作
工欲善其事,必先利其器,要看源碼,拿寫字板來看肯定是不行的(當然也不排除牛人)。你所需要的就是一個支持代碼跳轉的編輯器即可,我用的是 VSCode,當然了,如果你用 VIM、Sublime 也是可以的。
另外還需一些儲備知識:
如何閱讀
一般有三種途徑:
這里推薦第二種方式,因為單元測試是官方團隊維護的,質量肯定有保證,二來單元測試一般都很簡單,同時帶有注釋,這有利于我們理解代碼。
由于 vue-next 使用 jest 進行單元測試,在 vscode 中安裝 Jest 插件即可,它支持行內 debug lens 快捷入口,方便直接對某條單元測試進行 debug。
不過要注意配置一個自定義選項:
"jest.debugCodeLens.showWhenTestStateIn": [ "fail", "unknown", "pass", // 注意這里 ]
這里的 "pass" 代表即使單元測試通過,也會在上方顯示 debug lens,默認情況下,單元測試用例通過的話,這個 debug lens 標識不會顯示。
模塊職能歸納
runtime-core 目錄下有多個文件,我暫且把每個文件都當做一個子模塊來看待。vue 的代碼質量還是挺好的,模塊與模塊之間的耦合性都不是特別高,正因為如此,基本上每個模塊都有自己單獨對應的單元測試文件。
我在看的時候,基本上就是挨個看這些模塊的單元測試,然后調試過程中,會主動的進行一些代碼跳轉,去看一下具體的實現細節。下面把當前最新代碼下該文件目錄下的所有模塊的職能進行一些總結和歸納。
有一些較獨立的模塊我還沒有看完,但是不影響整體的源碼閱讀進程,日后對這些獨立模塊進行單獨研究時,才回來補充這些 todo 就好了。
公共 api 相關
實現公共 api 的模塊均是以 apixxx 這樣的格式來命名的,如下:
組件相關
其他
推薦的閱讀順序
直接說我自己的閱讀順序,我認為還是比較符合認知習慣的:
期間會遇到 suspense、lifecycle 之類的代碼,這類代碼也可以當做單獨的內容進行閱讀,在一開始看的時候,也可以不要太糾結于細節,當對整體流程有一個大概了解之后再回頭來看會清晰很多,之后我會專門整理一篇文章介紹這塊是如何實現的。
寫在最后
雖然 vue-next 的代碼現在還處在初期的階段,但是整體的閱讀體驗還是不錯的,結構清晰,可讀性也比較高,一些關鍵模塊也有注釋進行說明,唯一不足的地方在于,很多地方還是借助 as 關鍵字來進行類型斷言,我覺得這些地方可能有更好的方式實現類型推斷吧。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。