精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

源碼層面探索Vue3初始化

開(kāi)發(fā) 前端
我們通常使用的打包工具如:webpack vite 或者 rollup 之類的都會(huì)有一個(gè)配置文件 xxx.config.js 從這個(gè)文件中我們就能鎖定 entry 的入口文件,通過(guò)確定入口文件之后我們就能找到各個(gè)包之間的依賴關(guān)系,根據(jù)依賴包,一步步深挖理解初始化的整體流程。

本期內(nèi)容小編將給大家?guī)?lái):

  • 分析啟動(dòng)腳本
  • 查找入口文件

看看首次編譯過(guò)程,從源碼層面解析初始化細(xì)節(jié)

在我們開(kāi)始這期內(nèi)容之前,小編先帶領(lǐng)大家回顧一下上期的知識(shí)點(diǎn)。

還是從這張圖開(kāi)始,在上期內(nèi)容中我們談到,Vue3.0的源碼中最為核心的包就是叫做以 vue命名的文件包,在這個(gè)包內(nèi)有三個(gè)依賴關(guān)系,其中 runtime-dom 和 compiler-dom 是明顯的依賴關(guān)系,但其中還有一個(gè)隱性的依賴叫做reactivity 的依賴,這里面主要是做響應(yīng)式的一些處理,后期小編會(huì)帶領(lǐng)大家著重探討這個(gè)依賴包的原理,而其實(shí)真正的依賴在 runtime-core 這個(gè)包里,這個(gè)包才是真正告訴你createApp 是怎么由來(lái)的,內(nèi)部又做了哪些事情。

小編這里梳理了一下邏輯關(guān)系圖,createApp 這個(gè)方法最終在 createAppAPI 內(nèi)部有一個(gè)工廠函數(shù)在這里得到了一次擴(kuò)展 createApp 的方法,擴(kuò)展此方法最為重要的一點(diǎn)就是為了讓這個(gè)函數(shù)變得更加通用,我們知道在 createApp 里面?zhèn)魅胍粋€(gè) render 函數(shù),但是對(duì)于 createApp 來(lái)說(shuō)它只管調(diào)用傳入進(jìn)來(lái)的參數(shù),而并不關(guān)心你這個(gè)參數(shù)做了哪些的邏輯處理,真正我們能夠使用實(shí)例上的方法就是來(lái)源這個(gè) createAPI 擴(kuò)展之后得到的屬性,例如 component mixin use。

正文經(jīng)過(guò)之前的內(nèi)容回顧,想必大家對(duì) createApp已經(jīng)有了深刻的了解,接下來(lái)將進(jìn)入到本章內(nèi)容的核心部分,首先帶領(lǐng)大家分析啟動(dòng)腳本,看看啟動(dòng)腳本都做了哪些事情。

"dev": "node scripts/dev.js --sourcemap",

這行代碼想必大家應(yīng)該都不陌生吧,這就是我們啟動(dòng)項(xiàng)目的運(yùn)行腳本我們就要從 dev.js 這個(gè)腳本文件開(kāi)始下手。

WeChat46b3d93f7c154ae5e1b95022c46eb57b.png

minimist 是專門(mén)用來(lái)解析傳進(jìn)來(lái)的參數(shù),什么意思呢?當(dāng)我們?cè)谶\(yùn)行 npm run dev 這行命令的時(shí)候?qū)嶋H上是運(yùn)行 node scripts/dev.js 當(dāng)后面的路徑傳入 -- 或者 - 的時(shí)候會(huì)被解析成為第一個(gè)參數(shù),否則會(huì)打包成 vue 的包。

WeChat96a3eefa625cef34b030b68fe2353724.png

在這張圖中也能看出 dev-sfc 部分使用的打包格式為 esModule 格式,在瀏覽器中則會(huì)以type=module 出現(xiàn)。那么我么現(xiàn)在知道指令映射的代碼中的含義了,那么問(wèn)題來(lái)了下一步我們?cè)摳墒裁茨?哈哈哈~ 如果對(duì)工程化的框架比較了解的話,我們就要看看打包工具的配置文件,看看打包過(guò)后你的 entry 入口文件和你的export 打包后輸出文件是怎樣配置的,在源碼中使用的是 rollup 打包生成的,所以我們要瀏覽一下 rollup.config.js 這個(gè)配置文件。

WeChatc8eb0ccf03ff5fb6b79d0ed338c01de1.png

在配置系文件中我們就可以看到,所有獲取包目錄都是從 packages 中得來(lái)的,通過(guò)process.env.TARGET 進(jìn)行包名的路徑拼接,就會(huì)得到 /packages/xxx

WeChat024e26087aec3918dc0ecf425d3c7580.png

這里就是要配置的一些打包選項(xiàng),例如CommonJs ECMAScript 格式,這里講一下 iife格式,就是打包后生成一個(gè)匿名函數(shù)自調(diào)的格式,(()=>{})()

WeChat465926fb4d72cd8107ca6bf763ffba32.png

這里我們看到真正打包的是以 runtime 開(kāi)頭的包名稱,這時(shí)候他會(huì)根據(jù)你的指令中是否包含 -f runtime-xxx 這種格式的映射,生成兩種第一個(gè)是運(yùn)行時(shí)打包,沒(méi)有在初始化的時(shí)候把編譯器打包進(jìn)去,第二個(gè)則是全量打包。

WeChatee256bb4095f1e2a86c2e2321b505971.png

所以,我們就找到了在 packages/vue/index.ts這個(gè)路徑下的包,在這個(gè)包里面有一個(gè)叫做compileToFunction 編譯函數(shù)其真正的作用就是一個(gè)是解析 template 中的 innerHhtml,另一個(gè)就是生成一個(gè) render 渲染函數(shù),另外,在這個(gè)函數(shù)中他會(huì)判斷你傳進(jìn)來(lái)的參數(shù)是不是以字符串形式的模板另外一個(gè)是不是 dom,就是說(shuō)支持的寫(xiě)法 mount("< div>xxx") mount('#app') 或者 mount(app)。

WeChat98c822fa89560f875415a68ff6276a83.png

這里在 callStack 中就真正的解析了compileToFunction 是如何一步一步的變成渲染函數(shù)。

WeChat00a9bbcb59649cbbf8b1ce99b6c81d43.png

WechatIMG81.jpeg

從這個(gè)上面我們就看出,template 真正就是傳入的 innterHtml。

WeChat70bfdad15d56582ac1f31f3ea6ccab68.png

通過(guò)瀏覽器調(diào)試后我們就得出compileToFunction 是在 finishComponentSetup這個(gè)函數(shù)中調(diào)用的,而 template 就是要解析的innerHTML。

WeChat5f3653a52a450b5ece0d35a757cabe17.png

vue包中使用 registerRuntimeCompiler 將 compileToFunction 這個(gè)函數(shù)注冊(cè),這是為了初始化需要編譯時(shí)能夠調(diào)用它。這里原封不動(dòng)導(dǎo)出 runtime-dom,因此有了vue -> runtime-dom -> runtime-core這樣的依賴關(guān)系。

WeChat581967ab4ceb37c6fefa2ed599d85bad.png

WeChat802ba115543725ce52877e96d64aa870.png

隨后的流程就是:

createRenderer() => baseCreateRenderer() =>

createAppAPI(render, hydrate) => createApp()

app.mount() => render() => patch(n1, n2) =>

processComponent() => mountComponent()

這里我們主要研究一下 mountComponent() 掛載組件做了哪些事情。

WechatIMG82.jpeg

WeChat280ea252a066a6ad52f94d5f261b9ba3.png

在這個(gè)函數(shù)內(nèi)主要有兩個(gè)函數(shù)調(diào)用,一個(gè)是createComponentInstance 創(chuàng)建組件實(shí)例,另一個(gè)是 setupComponent 初始化組件實(shí)例,從這個(gè)函數(shù)開(kāi)始找尋。

WechatIMG86.jpeg

WechatIMG87.jpeg

在這里我們就看到組件初始化接收的就是一個(gè)setup 這塊對(duì)傳入不同方法做了各種處理,例如promise隨后會(huì)在 handleSetupResult() 這個(gè)方法內(nèi)處理 setup 的返回值。

WechatIMG88.jpeg

根據(jù) setup 返回不同的類型作出處理,比如 返回的是一個(gè)函數(shù),對(duì)象或者字符串之類的。

WechatIMG89.jpeg

執(zhí)行完畢后都會(huì)走 finishComponentSetup() 這個(gè)方法。

WeChatde62b32d0810ec4d669cb295a41fd91a.png

WeChat3cc852f1a9e27e9a71503075b277a1c8.png

所以在這個(gè)函數(shù)內(nèi)真正的是 返回一個(gè) render 函數(shù),并且兼容 Vue2.0 的方法。

到這里,基本上初始化所有的邏輯就理順啦~

總結(jié)

這期內(nèi)容小編就告訴大家從代碼的層面一步步的深入了解初始化過(guò)程,首先是從 package.json目錄文件中鎖定執(zhí)行的哪個(gè)腳本文件,我們通常使用的打包工具如:webpack vite 或者 rollup之類的都會(huì)有一個(gè)配置文件 xxx.config.js 從這個(gè)文件中我們就能鎖定 entry 的入口文件,通過(guò)確定入口文件之后我們就能找到各個(gè)包之間的依賴關(guān)系,根據(jù)依賴包,一步步深挖理解初始化的整體流程。

順便說(shuō)一句 Vue3.0 在2022年2月7日將正式成為默認(rèn)版本,屆時(shí)我們安裝的 vue 將會(huì)是3.x這個(gè)版本,屬于Vue3的時(shí)代將正式開(kāi)啟!


責(zé)任編輯:武曉燕 來(lái)源: 村長(zhǎng)學(xué)前端
相關(guān)推薦

2023-11-12 23:08:17

C++初始化

2023-05-29 09:37:17

Vue3Vite

2021-12-13 00:54:14

組件Vue3Setup

2023-11-29 08:49:31

Vue.jsData 函數(shù)

2021-07-07 05:00:17

初始化源碼

2021-09-22 07:57:23

Vue3 插件Vue應(yīng)用

2021-11-26 05:59:31

Vue3 插件Vue應(yīng)用

2025-03-14 10:37:24

SpringSpring IOC容器

2025-05-21 10:09:09

Spring 5.xIOC編程

2020-09-17 07:08:04

TypescriptVue3前端

2021-12-01 08:11:44

Vue3 插件Vue應(yīng)用

2016-09-14 22:22:03

Android Vue性能優(yōu)化

2021-11-30 08:19:43

Vue3 插件Vue應(yīng)用

2023-11-28 09:03:59

Vue.jsJavaScript

2021-09-27 06:29:47

Vue3 響應(yīng)式原理Vue應(yīng)用

2024-08-08 16:34:16

C++11編程

2020-09-19 21:15:26

Composition

2021-07-29 12:05:18

Vue3Api前端

2019-11-04 13:50:36

Java數(shù)組編程語(yǔ)言

2009-11-11 15:29:15

ADO初始化
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

欧日韩在线观看| 久久综合给合| 欧美成人自拍| 调教+趴+乳夹+国产+精品| 国产在线观看精品一区二区三区| 久久久久久婷婷| 91九色蝌蚪91por成人| 四虎影视精品| 亚洲国产欧美在线人成| 亚洲影影院av| www色aa色aawww| 91亚洲精品| 国产亚洲美州欧州综合国| 国内精品小视频| 成年人性生活视频| 欧美三级电影一区二区三区| 欧美大奶一区二区| 亚洲综合免费观看高清完整版 | 91精品国产一区二区| 日本不卡一区| 黄色在线视频网址| 丝袜连裤袜欧美激情日韩| 欧美亚洲禁片免费| 日韩免费av电影| 99成人精品视频| 欧美日韩性在线观看| 欧洲精品一区二区| 亚洲精品视频一二三| 一本色道久久综合亚洲| 91亚洲国产| 亚洲精品小视频| 欧美xxxxx在线视频| 蜜桃成人在线视频| 青娱乐精品视频| 国产亚洲日本欧美韩国| 色乱码一区二区三区在线| 日韩av中文| 韩国v欧美v亚洲v日本v| 欧美老少配视频| 国产高潮失禁喷水爽到抽搐| 91九色在线看| 国产日韩欧美高清在线| 激情欧美一区二区三区中文字幕| 欧美激情黑白配| 精品国产一区二区三区噜噜噜| 日韩免费视频线观看| 久久久久99精品成人片| 日韩国产福利| 久久精品72免费观看| 欧美国产日韩视频| 亚洲av综合一区二区| 久久久免费人体| 亚洲一二三区视频在线观看| 韩国一区二区三区美女美女秀 | 波多野结衣中文字幕久久| av男人天堂一区| 国产精品久久久久久婷婷天堂| youjizz.com亚洲| 日本精品影院| 欧美日韩中字一区| 亚洲激情图片| 91在线视频| 成人免费黄色在线| 国产精品2018| 日韩一区二区三区四区在线| 日韩电影不卡一区| 日韩精品免费在线| 亚洲黄色片免费看| 日本在线啊啊| 亚洲欧美另类久久久精品2019| 精品一区久久久久久| 天天色天天操天天射| 久久99九九99精品| 8x拔播拔播x8国产精品| 国产精品久久久免费看| 国产亚洲成av人片在线观黄桃| 在线观看欧美黄色| 国产九九在线观看| 精品一区二区三区中文字幕视频| 日韩午夜在线观看视频| 日本www.色| 狂野欧美性猛交xxxxx视频| 国产亚洲欧美日韩俺去了| 色涩成人影视在线播放| 日本精品一区二区在线观看| 久久精品国产亚洲高清剧情介绍| 国产欧美精品日韩| 国产中文字幕视频| 麻豆成人av在线| 国产精品日韩一区二区免费视频 | 岛国精品视频在线播放| 一级黄色免费在线观看| 影院在线观看全集免费观看| 国产精品免费人成网站| 久久伊人一区| 五月天婷婷在线播放| 国产成人自拍网| 国产欧美精品一区二区三区介绍| 精品国产免费无码久久久| 日本一不卡视频| 亚洲精品日产aⅴ| 天堂网www中文在线| 丰满亚洲少妇av| 成人性生交大片免费观看嘿嘿视频| av片免费观看| 亚欧美中日韩视频| 欧美在线xxx| 国产精品人人人人| 精品一区二区三区免费播放| 国产综合色一区二区三区| 亚洲伦理在线观看| 国产成人免费视频精品含羞草妖精 | 亚洲美女在线观看| v天堂中文在线| 高潮按摩久久久久久av免费| 在线看日韩av| 国产一二三四视频| 久久精品国产99久久| 欧美激情中文网| 国产在线精品观看| 午夜亚洲精品| 99久久综合狠狠综合久久止| 丰满熟女一区二区三区| 国产精品对白交换视频| mm131午夜| 人妖欧美1区| 欧美日韩卡一卡二| 不用播放器的免费av| 国内精品视频| 欧美成人在线直播| 亚洲图片第一页| 天堂va蜜桃一区二区三区| 国产精品日韩在线播放| 少妇激情av一区二区| 亚洲成人tv网| 成年女人免费视频| 欧美激情第8页| 8x海外华人永久免费日韩内陆视频| 999免费视频| 成人国产一区二区三区精品| 玛丽玛丽电影原版免费观看1977| 欧美草逼视频| 日韩情涩欧美日韩视频| 免费国产羞羞网站美图| 蜜臀av在线播放一区二区三区 | 欧美精品久久久久久久自慰| 麻豆mv在线看| 精品国产一区二区三区四区四| v天堂中文在线| 在线日韩电影| 国产精品久久久久久久久久99| 在线免费av网| 欧美韩日一区二区三区| 9191国产视频| 欧美成人免费电影| 日韩欧美激情一区| 五月婷婷一区二区| 高清在线成人网| 一卡二卡三卡视频| 日韩精品欧美大片| 国产精品盗摄久久久| 91精品大全| 制服丝袜成人动漫| 亚洲人成人无码网www国产| 久久中文亚洲字幕| 91精品啪在线观看麻豆免费| 婷婷丁香一区二区三区| 欧美日韩国内自拍| 中文字幕免费视频| 免费成人av在线播放| 日韩不卡一二区| 亚洲视频一起| 日韩在线视频中文字幕| 精品在线播放视频| 国产在线精品一区二区夜色 | 亚洲高清视频的网址| 日本50路肥熟bbw| 亚洲欧美成人| 伊人狠狠色丁香综合尤物| 黄色激情在线播放| 欧美一区二区美女| 日本一区二区免费在线观看| 91免费看片在线观看| 97中文字幕在线| 青青伊人久久| 国产一区二区三区在线视频| 97人妻精品一区二区三区| 久久久久久综合| 日韩欧美亚洲天堂| 风间由美中文字幕在线看视频国产欧美| 久久久免费观看视频| 每日更新在线观看av| 9191久久久久久久久久久| 国产无遮无挡120秒| 国产精品亚洲一区二区三区在线| 亚洲第一在线综合在线| 欧一区二区三区| 久久夜色精品国产亚洲aⅴ| 亚洲 小说区 图片区| 亚洲精选在线视频| 亚洲第一综合网| 日本在线不卡一区| 成人免费看片'免费看| 精品freesex老太交| 国产精品国产一区二区| 欧美videos粗暴| 7m第一福利500精品视频| av电影高清在线观看| 亚洲午夜未删减在线观看 | 在线看无码的免费网站| 任你弄精品视频免费观看| 亚洲va久久久噜噜噜久久天堂| 亚洲人成在线网站| 精品调教chinesegay| 国产老女人乱淫免费| 色综合久久久久网| 中文字幕有码在线播放| 国产精品日韩| 精品蜜桃一区二区三区| 99国内精品久久久久| 欧美精品一区在线播放| 性一交一乱一透一a级| 亚洲午夜一区二区三区| 国产白丝一区二区三区| 久久久久久久久久久久久久久99| 无码国产精品一区二区免费式直播 | 米奇精品一区二区三区在线观看| 嫩草在线播放| 精品亚洲男同gayvideo网站| 蜜桃在线一区二区| 日韩欧美一级二级三级| 国产又粗又猛又黄又爽| 欧美三级乱人伦电影| 免费看污视频的网站| 都市激情亚洲色图| 五月婷婷亚洲综合| 久久久不卡网国产精品一区| 波多野结衣加勒比| 北条麻妃国产九九精品视频| 好吊操视频这里只有精品| 99精品国产一区二区青青牛奶| 久久久久久久久久码影片| 日韩不卡免费高清视频| 欧美一级大胆视频| 忘忧草在线日韩www影院| 97视频国产在线| 9191在线| 尤物精品国产第一福利三区| 精品成人一区二区三区免费视频| 欧美精品日韩一本| 五月天婷婷网站| 亚洲靠逼com| 久久网免费视频| 国产欧美精品在线观看| 谁有免费的黄色网址| 国产欧美日韩激情| 女人裸体性做爰全过| 中文字幕一区av| 国产精品久久久久久久精| 亚洲综合自拍偷拍| 国产精品久久久免费视频| 色国产精品一区在线观看| 国产盗摄x88av| 一区二区高清免费观看影视大全| 久久午夜无码鲁丝片| 天天av天天翘天天综合网色鬼国产| 黄色片免费观看视频| 日本丶国产丶欧美色综合| 中文字幕av免费观看| 五月婷婷综合激情| 日日操免费视频| 亚洲欧美另类小说视频| 国产成人精品a视频一区| 色婷婷av一区二区三区gif| 中文字幕人妻色偷偷久久| 欧美日韩成人一区二区| 精品久久久中文字幕人妻| 日韩av网站导航| 日本视频在线免费观看| 欧美激情视频网站| 欧美三级网站| 国产一区私人高清影院| 国产精品45p| 亚洲精品中字| 亚洲黄页一区| 激情五月俺来也| 成人蜜臀av电影| 国产美女永久免费无遮挡| 亚洲猫色日本管| 成人午夜淫片100集| 欧美日韩高清影院| 四虎影视精品成人| 久久精品国产电影| 午夜毛片在线| 久久免费成人精品视频| 久久精品超碰| 九九九九九精品| 久久久久久久久久久妇女| 亚洲欧美在线网| 狠狠88综合久久久久综合网| 日韩一级特黄毛片| 中文字幕日韩欧美精品高清在线| 一区二区不卡在线视频 午夜欧美不卡' | 蜜桃传媒一区二区亚洲| 一区二区三区中文字幕精品精品 | 精品国产欧美日韩| 亚洲色成人www永久在线观看| 七七婷婷婷婷精品国产| 午夜不卡久久精品无码免费| 亚洲欧洲成人自拍| 天天操夜夜操av| 国产精品成人免费在线| 日本一区二区三区四区五区| 91精品国产一区二区人妖| 国产粉嫩一区二区三区在线观看| 亚洲欧美综合v| 国产资源在线观看| 久久久久久久久久久人体 | 欧美精品自拍偷拍| 黄色片在线免费看| 18性欧美xxxⅹ性满足| 亚洲综合色婷婷在线观看| 亚洲在线色站| 日韩电影免费一区| 日韩在线一区视频| 国产片一区二区| 黄色免费av网站| 日韩电影在线观看中文字幕| 不卡的av影片| 成人在线观看av| 亚洲涩涩av| 亚洲 国产 欧美一区| 久久久噜噜噜久久狠狠50岁| 色婷婷综合网站| 亚洲国产电影在线观看| 美女福利视频在线观看| 欧美久久久影院| av在线中文| 九九热99久久久国产盗摄| 成人国产精品久久| 中国一级黄色录像| 韩国精品在线观看| 91高清免费看| 91精品国产91久久综合桃花| 国产视频一区二区| 欧美专区日韩视频| 免费观看成人www动漫视频| 丰满少妇大力进入| www..com久久爱| 国产黄色片免费看| 亚洲嫩模很污视频| 日韩欧美一区二区三区在线观看 | 亚洲影院一区二区三区| 伊人久久久久久久久久久| 成人在线观看免费播放| 伊人av成人| 国产91高潮流白浆在线麻豆 | 最新中文字幕视频| 中文字幕一区二区三区精华液| 在线观看色网站| 久久久精品久久| 一区二区在线免费播放| 国产美女在线一区| 久久五月婷婷丁香社区| 欧美激情一区二区视频| 日本韩国精品一区二区在线观看| 黄视频在线播放| 国产精品一区二区久久精品| 91超碰国产精品| 白嫩情侣偷拍呻吟刺激| 色综合咪咪久久| 免费黄网站在线| 岛国视频一区免费观看| 国产麻豆综合| 男人的午夜天堂| 精品国产成人系列| 国产高清不卡| 精品国产乱码久久久久久郑州公司 | 国产一区视频免费观看| 中文字幕在线不卡| 人妻无码中文字幕| 国产精品91免费在线| 中文无码久久精品| 国产肉体xxxx裸体784大胆| 亚洲激情av在线| 日韩电影免费| 国产色视频一区| 99亚洲精品| 99久久精品久久亚洲精品| 亚洲第一天堂av| 日日夜夜天天综合入口| 成人淫片在线看| 国产精品毛片在线| 91ts人妖另类精品系列| 亚洲а∨天堂久久精品喷水| 日韩经典一区| 视频一区二区三区免费观看| 国产精品中文字幕日韩精品 | 国产精品情侣呻吟对白视频| 日韩视频在线一区二区|