Vue源碼-一準(zhǔn)備工作

目錄結(jié)構(gòu)
image.png
Vue的不同構(gòu)建版本
  • 通過npm run build 打包出所有版本的文件
  • 通過 dist/READMe.md重虑,可以獲取到不同版本的解釋
UMD CommonJS ES Module
Full vue.js vue.common.js vue.esm.js
Runtime-only vue.runtime.js vue.runtime.common.js vue.runtime.esm.js
Full (production) vue.min.js
Runtime-only (production) vue.runtime.min.js
術(shù)語解釋
  • 完整版:同時(shí)包含編譯器運(yùn)行時(shí)的版本。
  • 編譯器:用來將模板字符串編譯成為 JavaScript 渲染函數(shù)的代碼秧荆,體積大,效率低
  • 運(yùn)行時(shí):用來創(chuàng)建 Vue 實(shí)例,渲染并處理虛擬 DOM 等的代碼帖鸦,體積小易遣,效率高〈昊希基本上就是除去編譯器的代碼杆故。
  • UMD:UMD 版本通用的模塊版本,支持多種模塊方式溉愁,包括直接掛載到window上处铛。vue.js默認(rèn)文件就是運(yùn)行時(shí) + 編譯器的 UMD 版本
  • CommonJS:CommonJS版本用來配合老的打包工具比如Browserifywebpack 1拐揭。
  • ES Module:從2.6開始 Vue 會(huì)提供兩個(gè) ESM 構(gòu)建文件撤蟆,為現(xiàn)代打包工具提供的版本。
    • ESM 格式被設(shè)計(jì)為可以被靜態(tài)分析堂污,所以打包工具可以利用這一點(diǎn)來進(jìn)行tree shaking家肯,并將用不到的代碼排除出最終的包。

尋找入口文件

  • 在package.json中盟猖,找到打包的配置文件


    image.png
  • 打開scripts/config.js,找到文件導(dǎo)出的地方

    image.png

  • 進(jìn)入genConfig()函數(shù)(按住command+鼠標(biāo)左鍵)

    image.png

先看genConfig()函數(shù)的第一行讨衣,根據(jù)傳入的參數(shù)獲取對(duì)應(yīng)的選項(xiàng),在npm run dev時(shí)式镐,我們傳入了TARGET:web-full-dev

  • 進(jìn)入builds反镇,找到web-full-dev

    image.png

  • 進(jìn)入resolve()函數(shù)

    image.png

獲取到base的值:web,在aliases中找到對(duì)應(yīng)的值

image.png

這樣最后拼接出entry的地址:
src/platforms/web/entry-runtime-with-compiler.js
找到打包的入口文件娘汞!


解決一個(gè)問題

初始化時(shí)同時(shí)傳入templaterender歹茶,頁面上會(huì)輸出什么?

const vm = new Vue({
  el: '#app',
  tempalte: '<h3>Hello Template</h3>',
  render (h) {
    return h('h4', 'Hello Render!')
  } 
})

進(jìn)去入口文件src/platforms/web/entry-runtime-with-compiler.js,找到$mount方法

image.png

  • 通過查看會(huì)發(fā)現(xiàn)辆亏,如果傳入了render风秤,就會(huì)使用傳入的render,否則使用template
  • 那么$mount是什么時(shí)候被調(diào)用的呢扮叨?打開瀏覽器的sources,給$mount方法加上斷點(diǎn)缤弦,通過右側(cè)的Call Stack可以查看到$mount的調(diào)用過程:在初始化Vue實(shí)例時(shí),調(diào)用的init彻磁,在init中調(diào)用了$mount
    image.png

一些其它的

  • 下載vue源碼后碍沐,給dev命令添加 --sourceMap,方便調(diào)試
  • 收起所有代碼,command + k, 展開:command + 0
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末衷蜓,一起剝皮案震驚了整個(gè)濱河市累提,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌磁浇,老刑警劉巖斋陪,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異置吓,居然都是意外死亡无虚,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門衍锚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來友题,“玉大人,你說我怎么就攤上這事戴质《然拢” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵告匠,是天一觀的道長戈抄。 經(jīng)常有香客問我,道長后专,這世上最難降的妖魔是什么呛凶? 我笑而不...
    開封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮行贪,結(jié)果婚禮上漾稀,老公的妹妹穿的比我還像新娘。我一直安慰自己建瘫,他們只是感情好崭捍,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著啰脚,像睡著了一般殷蛇。 火紅的嫁衣襯著肌膚如雪实夹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天粒梦,我揣著相機(jī)與錄音亮航,去河邊找鬼。 笑死匀们,一個(gè)胖子當(dāng)著我的面吹牛缴淋,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播泄朴,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼重抖,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了祖灰?” 一聲冷哼從身側(cè)響起钟沛,我...
    開封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎局扶,沒想到半個(gè)月后恨统,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡三妈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年延欠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沈跨。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖兔综,靈堂內(nèi)的尸體忽然破棺而出饿凛,到底是詐尸還是另有隱情,我是刑警寧澤软驰,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布涧窒,位于F島的核電站,受9級(jí)特大地震影響锭亏,放射性物質(zhì)發(fā)生泄漏纠吴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一慧瘤、第九天 我趴在偏房一處隱蔽的房頂上張望戴已。 院中可真熱鬧,春花似錦锅减、人聲如沸糖儡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽握联。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間金闽,已是汗流浹背纯露。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留代芜,地道東北人埠褪。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像蜒犯,于是被迫代替她去往敵國和親组橄。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容