在開始原始碼分析工作之前,我們在當前篇章做好相應的準備工作,以便更好地展開分析。
將原始碼fork到自己的github倉庫中
git clone 自己的github/vue 位址
dist 打包之後的結果
examples 示例
src ├─compiler 編譯相關
├─core vue 核心庫
├─components 定義vue中自帶的keep-alive元件
├─global-api 定義vue中的靜態方法
├─instance 建立vue例項
├─observer 響應式機制
├─util 公共成員
├─vdom 虛擬dom
├─platforms 平台相關**
├─server ssr,服務端渲染
├─sfc .vue 檔案編譯為 js 物件
└─shared 公共的**
1. 打包
vue 中使用的打包工具是rollup安裝依賴:
yarn
設定sourcemap
package.json 檔案中的 dev 指令碼中新增引數 --sourcemap
"dev": "rollup -w -c scripts/config.js --sourcemap --environment target:web-full-dev",
-w: watch 當原始碼發生變化的時候立即執行打包
-c: 指向配置檔案
--environment target: 設定環境變數target
執行 dev :yarn dev
2. 除錯
開啟檔案examples/grid/index.html
修改vue引入位置
瀏覽器中執行當前html
debuggerexamples/grid/grid.js
linevar demo = new vue({
命令
通過yarn build
可以將不同版本的vue都打包出來
相關文件
官方文件
dist/readme.md
umdcommonjs
es module
fullvue.js
vue.common.js
vue.esm.js
runtime-onlyvue.runtime.js
vue.runtime.common.js
vue.runtime.esm.js
full (production)vue.min.js
runtime-only (production)vue.runtime.min.js
解釋
檢視
檢視vue webpack配置檔案:vue inspect > output.js
基於 vue-cli 建立的專案預設使用的是vue.runtime.esm.js
首先找到package.json 中的dev指令碼"dev": "rollup -w -c scripts/config.js --sourcemap --environment target:web-full-dev",
明確引數
-c scripts/config.js 指向當前打包配置檔案
target為當前打包的vue版本
通過scripts/config.js跟蹤入口檔案【rollup相關配置文件】
結果:src/platforms/web/entry-runtime-with-compiler.js
示例: $mount呼叫處在**
除錯測試**: 找到入口檔案處打斷點,斷點進入後檢視呼叫堆疊:vue.$mount是在vue._init中呼叫的, vue._init()是在src/core/instance/index.js
中呼叫的
恭喜你,已經完成了我們整個程序的準備工作,現在開始我們開始真正的原始碼之旅吧~
Vue原始碼分析(流程分析)
使用步驟 1.編寫 頁面 模板 1.直接在html標籤中寫 2.使用template 3.使用單檔案 2.建立vue例項 1.在vue 的建構函式中 data,methods,computer,watcher,props,3.將vue掛載到頁面中 mount 資料驅動模型 vue執行流程 1.獲得模...
vue原始碼分析1
在vue的原始碼中使用的是es5的方法 prototype.slice.bind obj 來實現的 例如 已 為例 obj 定義屬性的物件 prop 定義或修改屬性的名稱 descriptor 將被定義或修改的屬性描述符 value 預設值 configurable 是否可以重新定義 enumera...
Vue原始碼主體分析
vue的響應式和react的函式式程式設計思想是很不同的。vue最基本的原理是對getter和setter的 模式。以及觀察者模式。當資料發生變化時,通知觀察者。而watcher是通過觸發資料的getter,成為觀察者的。vue的生命週期中,在create階段,vue建立了例項。在mount 階段,...