vue 原始碼目錄設計

September發表於2019-08-27

Vue.js 的原始碼都在 src 目錄下,其目錄結構如下。

src
├── compiler        # 編譯相關
├── core            # 核心程式碼
├── platforms       # 不同平臺的支援
├── server          # 服務端渲染
├── sfc             # .vue 檔案解析
├── shared          # 共享程式碼

compiler

compiler 目錄包含 Vue.js 所有編譯相關的程式碼。它包括把模板解析成 ast 語法樹,ast 語法樹最佳化,程式碼生成等功能。

編譯的工作可以在構建時做(藉助 webpack、vue-loader 等輔助外掛);也可以在執行時做,使用包含構建功能的 Vue.js。顯然,編譯是一項耗效能的工作,所以更推薦前者——離線編譯。

core

core 目錄包含了 Vue.js 的核心程式碼,包括內建元件、全域性 API 封裝,Vue 例項化、觀察者、虛擬 DOM、工具函式等等。

這裡的程式碼可謂是 Vue.js 的靈魂,也是我們之後需要重點分析的地方。

platform

Vue.js 是一個跨平臺的 MVVM 框架,它可以跑在 web 上,也可以配合 weex 跑在 natvie 客戶端上。platform 是 Vue.js 的入口,2 個目錄代表 2 個主要入口,分別打包成執行在 web 上和 weex 上的 Vue.js。

server

Vue.js 2.0 支援了服務端渲染,所有服務端渲染相關的邏輯都在這個目錄下。注意:這部分程式碼是跑在服務端的 Node.js,不要和跑在瀏覽器端的 Vue.js 混為一談。

服務端渲染主要的工作是把元件渲染為伺服器端的 HTML 字串,將它們直接傳送到瀏覽器,最後將靜態標記"混合"為客戶端上完全互動的應用程式。

sfc

通常我們開發 Vue.js 都會藉助 webpack 構建, 然後透過 .vue 單檔案的編寫元件。

這個目錄下的程式碼邏輯會把 .vue 檔案內容解析成一個 JavaScript 的物件。

shared

Vue.js 會定義一些工具方法,這裡定義的工具方法都是會被瀏覽器端的 Vue.js 和服務端的 Vue.js 所共享的。

總結

從 Vue.js 的目錄設計可以看到,作者把功能模組拆分的非常清楚,相關的邏輯放在一個獨立的目錄下維護,並且把複用的程式碼也抽成一個獨立目錄。

這樣的目錄設計讓程式碼的閱讀性和可維護性都變強,是非常值得學習和推敲的。

git 到本地

git clone  https://github.com/vuejs/vue.git
本作品採用《CC 協議》,轉載必須註明作者和本文連結
日照香爐生紫煙

相關文章