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 協議》,轉載必須註明作者和本文連結