--本文采自本人公衆號【猴哥別瞎說】javascript
源碼解讀的vue版本爲:2.6.10。 標註有對應註釋的源碼地址:src.html
文章細分章節,各自標題前面的字段含義以下:vue
[幹] 乾貨,有內容。java
[硬] 硬貨,內容較多且不易消化。git
[幹]構造函數與初始化github
[硬]數據響應式web
[幹]異步更新隊列chrome
[硬]虛擬DOM的引入npm
想要閱讀源碼,可是從 github 上面拉下來代碼以後,殊不知如何下手。我想這是不少人遇到的難題。
以 vue2.6.x 系列爲例,當咱們 git pull 源碼以後,打開文件結構,可能會一臉懵逼。這時候,咱們須要對源碼的基本結構有一個大體的瞭解。
/vue
/dist :生成最終文件存放的文件夾
/example : 官方提供的案例代碼
/flow : flow類型聲明文件
/packages : 代碼裏用到的獨立外部包文件
/scripts : 打包腳本,配置等
/src : 核心代碼
/compiler : 編譯器
/core : 核心代碼(通用代碼)
/platforms : 平臺代碼(特殊代碼)
/web : 網頁端代碼
/weex : 移動端代碼
/server : 服務端相關
/sfc : 單文件解釋器
/shared : 共享邏輯代碼
/test : 測試文件
複製代碼
這些文件夾的含義,大體能夠經過其名字就能夠知道大體的做用。其中src下面的三個文件夾,將會是源碼閱讀的重點:compiler、core、platforms。
那麼,下一個問題來了,咱們如何去閱讀源碼呢?整個項目的入口在哪裏?
這個時候咱們須要看看 package.json 的指令。查看dev命令:
"dev": "rollup -w -c scripts/config.js --environment TARGET:web-full-dev"
複製代碼
咱們看到了TARGET有一個指向:web-full-dev。其含義應該是web環境下的Dev模式。全局搜索整個關鍵字,發如今/scripts/config.js文件中有這樣的描述:
// runtime-only build (Browser)
'web-runtime-dev': {
entry: resolve('web/entry-runtime.js'),
dest: resolve('dist/vue.runtime.js'),
format: 'umd',
env: 'development',
banner
}
複製代碼
這個時候,經過解析resolve函數,咱們就能夠發現入口文件在src/platforms/web/entry-runtime-with-compiler.js。
因而,找到入口了。
下一步,咱們但願可以在本地可以調試源碼。這個時候,咱們須要作下面的步驟:
1.安裝依賴:npm i
2.安裝rollup : npm i -g rollup
3.修改package.json的dev腳本,添加sourcemap屬性,讓調試時候能夠定位到源碼
"dev": "rollup -w -c scripts/config.js --sourcemap --environment TARGET:web-full-dev"
複製代碼
4.運行開發命令:npm run dev
5.編寫一個最簡單的html文件,引用建立的vue.js文件。
<script src="path/to/dist/vue.js"></script>
複製代碼
6.使用chrome瀏覽器打開該文件。
7.接下來就能夠在瀏覽器愉快地調試代碼了。