這篇文章主要介紹下筆者看原始碼的一些心得和方式,由於筆者看的大部分是前端專案,當然也看過一些其它領域的原始碼,不過不多,所以內容主要還是以前端專案為主
在準備看乙個開源專案原始碼的時候先去熟悉下這個專案的背景、功能以及相應的api。這步為了理解整個專案的功能做準備,也是為了後面重點看哪些模組做準備
檢視專案的readme.md檔案。有些專案會在將設計文件和架構圖放到md檔案上,這樣會讓你巨集觀上對一些概念有些認識。例如immer
檢視專案整體的檔案結構。比如下面提到一些重點需要檢視的檔案
知道一些預設命名的檔案規則,比如
static,靜態檔案,前端專案一般都會用來作為給瀏覽器執行的入口檔案
test,測試用例資料夾
... 這期間哪怕你遇到一些檔案你不知道有什麼用,有2個方式可以了解到
做完前面的準備工作後,這時候你應該對這個專案有乙個大致的了解,這裡你可以先簡單寫寫你對這個專案的一些疑惑,請注意!!!這裡的問題很重要,因為看原始碼必須要帶著問題去看,不然你會摸不到方向。至於這裡的問題,你可以先列個清單,比如mpvue
接著我可以開始正式的看原始碼了,這裡容我說句題外話。有人可能喜歡先從第乙個commit看起,因為第乙個commit的原始碼會比較簡單易懂,但是我並不喜歡這樣,因為第乙個commit的**往往跟現有的文件差距比較大(除非這個專案比較新),無法了解到整體的結構,而且第乙個commit的**可能跟最新的**在架構上面有著翻天覆地的變化,反而做了一些無用功。
1.入口檔案,幾乎所有的專案都會有乙個入口檔案,其實你做上面的準備工作之後,基本你都能找到入口檔案,無非就是從2個方面入手
工具的配置檔案,比如webpack的entry欄位,gulp.src執行的檔案路徑等等
2.以模組為單元開始閱讀,帶著你上面準備的問題,抽絲剝繭、層層深入。這裡分享乙個小技巧,可以先fork下乙個專案,在閱讀的過程中不斷加上自己的注釋和理解,乙個好的專案往往在結構上面都是很清晰,例如
好的原始碼是可以從命名上面都能直接給讀者一些資訊,方便閱讀。
3.當你深入讀到某一塊原始碼不理解,先試著在網上找找有沒有相關的資料學習下,實在找不到可以先標記下放著,等你看到後面再回過頭來看不理解的地方或者會茅塞頓開。
1.在你閱讀的過程中,如果發現一些**片段很精妙的可以記錄一下,或者嘗試下有沒有更好的方式去實現,也許你就成了這個專案contributors了
2.當你不了解某個模組的作用時,你可以去看看測試用例,特別是單元測試(unit),測試用例包含對輸入輸出的校驗,從這裡可以快速了解到模組相關的作用
3.要學會給專案打斷點,在邊讀邊執行專案原始碼的過程中,通過斷點輸出當前執行的堆疊資訊對你理解專案也是有很大的幫助
初學者在github上面閱讀原始碼的時候可以先從一些小的專案入手,比如實現了某個功能或者元件這樣的專案,先不要看一些大而全的框架,比較容易上手,當你積累了一定的經驗後再嘗試下看框架的原始碼。 另外搭配一些工具來閱讀或者會更好,筆者推薦一些工具給大家
學習專案原始碼不是一蹴而就,往往週期比較長,最好的就是能夠將專案fork下來,單獨準備好乙份筆記,慢慢去研究、記錄看原始碼過程中的一些心得,到最後看完再回過頭來你能說出它的架構和設計,那麼我覺得這個學習是有意義,所以我認為閱讀原始碼的終究目標是了解專案,最終能實現它
前端rem單位的正確使用姿勢
原文 主題html 寫這篇文章是因為自己被rem這個坑絆過腳,因此特意去研究了下rem這個單位。簡單闡述下px em rem之前的關係 其實網上很多,我這裡稍微提一下 先丟擲乙個問題 為什麼要選擇rem?px 畫素是相對於顯示器螢幕解析度而言的相對長度單位。pc端使用px倒也無所謂,可是在移動端,因...
UWP 漲姿勢UWP原始碼 極簡的RSS閱讀器
原文 uwp 漲姿勢uwp原始碼 極簡的rss閱讀器 該專案 可能會引起部分人群的不適,敏感人群請在父母陪同下閱讀。工程檔案備註 zhangzishirssread rssreader.cs 負責rss內容的讀取和解析 filestorehelper.cs 將rss內容儲存成本地xml檔案,以及讀取...
建議的開源專案原始碼閱讀習慣
開源專案已閱讀了不少,總結下來按照下面的steps來操作比較恰當 1 閱讀features。以此來搞清楚該專案有哪些特性 2 思考。想想如果自己來做有這些features的專案該如何構架 5 如果有介紹專案架構的文件,通過它了解專案的總體架構,如果沒有,通過api doc了解原始碼包的結構 6 分兩...