vue源碼解析(一)

vue源碼解析(一)

先決條件
  • 需要能夠熟悉使用 vue 礁遣,了解vue屬性和方法懦窘。
  • 帶著問(wèn)題去看源碼
  • 熟悉ES6或者Typescript語(yǔ)法
  • 確定源碼的版本短纵,我看的是 2.6.12
從哪文件開(kāi)始看vue源碼杈帐?

現(xiàn)在前端開(kāi)發(fā),都是用 npm 管理我們開(kāi)發(fā)中經(jīng)常使用各種依賴包悟泵,vue也不例外杈笔,所以,我們下載源碼后糕非,先找到 package.json 文件蒙具,知道編譯腳本的文件代碼和執(zhí)行vue的入口文件代碼是哪個(gè)

如上圖朽肥,我們找到了執(zhí)行vue入口文件(dist/vue.runtime.common.js)和build 腳本執(zhí)行文件(scripts/build/js)禁筏。


先看 build 腳本執(zhí)行文件代碼


scripts/build.js文件中,可以看到執(zhí)行了 build()方法衡招,這個(gè)方法主要作用就是循環(huán)使用 rollup 插件來(lái)編譯打包我們模塊代碼篱昔,rollup 和 webpack 類似,不過(guò)主要打包 js 文件始腾,開(kāi)發(fā)純js插件州刽,建議使用rollup,開(kāi)發(fā)組件的話建議使用webpack浪箭。


言歸正傳穗椅,上面說(shuō)循環(huán)打包,這個(gè)循環(huán)的數(shù)據(jù)來(lái)源于build()方法的參數(shù)奶栖,let builds = require('./config').getAllBuilds()匹表。
根據(jù)以上代碼找到同級(jí)目錄下的 config.js 文件,代碼如下。


主要代碼 exports.getAllBuilds = () => Object.keys(builds).map(genConfig),這個(gè)代碼的作用就是根據(jù) builds 數(shù)據(jù)评疗,組織要打包的配置項(xiàng)數(shù)組, 返回給 rollup 進(jìn)行打包。


builds數(shù)據(jù)

重點(diǎn)在最后一個(gè)配置項(xiàng) web-runtime-prod

文章一開(kāi)始流椒,我們找到了 vue 的入口文件 dist/vue.runtime.min.js,再通過(guò)找到這個(gè)配置項(xiàng)明也,我們就知道了編譯入口文件的源碼文件就是 entry-runtime.js ,距離我們 從哪兒看源碼的問(wèn)題 只有一步距離惯裕,只要找到 entry-runtime.js 就行温数。


我們?cè)俜治鲆幌?resolve 方法

這個(gè)方法,主要作用就是拼接路徑蜻势。

具體方法是:通過(guò)正則表達(dá)式撑刺,把傳入的地址參數(shù)截取兩段,比如:web/entry-runtime.js 截取后就是 base = ['web', 'entry-runtime.js']握玛。

再通過(guò)別名文件 require('./alias') 找到 web對(duì)應(yīng)的真實(shí)路徑够傍。

最后的源碼文件地址就是 src/platforms/web/entry-runtime.js

總結(jié)

以上說(shuō)了那么多甫菠,主要就是先確定vue的編譯后的文件,再根據(jù)執(zhí)行腳本文件冕屯,順藤摸瓜找到vue的源碼寂诱。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市安聘,隨后出現(xiàn)的幾起案子痰洒,更是在濱河造成了極大的恐慌,老刑警劉巖浴韭,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件丘喻,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡念颈,警方通過(guò)查閱死者的電腦和手機(jī)泉粉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)榴芳,“玉大人搀继,你說(shuō)我怎么就攤上這事〈溆铮” “怎么了叽躯?”我有些...
    開(kāi)封第一講書人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)肌括。 經(jīng)常有香客問(wèn)我点骑,道長(zhǎng),這世上最難降的妖魔是什么谍夭? 我笑而不...
    開(kāi)封第一講書人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任黑滴,我火速辦了婚禮,結(jié)果婚禮上紧索,老公的妹妹穿的比我還像新娘袁辈。我一直安慰自己,他們只是感情好珠漂,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布晚缩。 她就那樣靜靜地躺著,像睡著了一般媳危。 火紅的嫁衣襯著肌膚如雪荞彼。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,698評(píng)論 1 305
  • 那天待笑,我揣著相機(jī)與錄音鸣皂,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛寞缝,可吹牛的內(nèi)容都是我干的癌压。 我是一名探鬼主播,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼荆陆,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼滩届!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起慎宾,我...
    開(kāi)封第一講書人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤丐吓,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后趟据,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體券犁,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年汹碱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了粘衬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡咳促,死狀恐怖稚新,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情跪腹,我是刑警寧澤褂删,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站冲茸,受9級(jí)特大地震影響屯阀,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜轴术,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一难衰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧逗栽,春花似錦盖袭、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至兵志,卻和暖如春醇蝴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背想罕。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人按价。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓惭适,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親楼镐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子癞志,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355

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

  • 一、FLow類型檢測(cè) 安裝Flownpm install flow-bin 初始化flow項(xiàng)目flow init ...
    zackxizi閱讀 554評(píng)論 1 1
  • 開(kāi)始一步一步解析vue源碼框产,徹底搞懂它凄杯。 vue.js 是一套構(gòu)建用戶界面的漸進(jìn)式框架,其輕量秉宿,易學(xué)受到許多開(kāi)發(fā)者...
    HTAO濤閱讀 1,813評(píng)論 0 1
  • [TOC] Vue 學(xué)習(xí)筆記 Vue 源碼解析 - 主線流程 Vue 源碼解析 - 模板編譯 Vue 源碼解析 -...
    Whyn閱讀 1,599評(píng)論 0 0
  • vue.js 是一套構(gòu)建用戶界面的漸進(jìn)式框架戒突,其輕量,易學(xué)受到許多開(kāi)發(fā)者的喜愛(ài)描睦。了解源碼膊存,有助于我們深刻理解vue...
    老劉大話前端閱讀 1,933評(píng)論 0 4
  • 大家都知道,閱讀源碼可以幫助自己成長(zhǎng)忱叭。源碼解析的文章也看了不少隔崎,但是好記性不如爛筆頭,看過(guò)的東西過(guò)段時(shí)間就忘的差不...
    snow_in閱讀 4,748評(píng)論 0 7