精品欧美一区二区三区在线观看 _久久久久国色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)

国产一区二区精品丝袜| 亚洲福中文字幕伊人影院| 国产精品678| 无码人妻精品中文字幕 | 亚洲人成伊人成综合网小说| 亚洲一区二区日本| 韩国av免费观看| av一区二区在线播放| 欧美丰满少妇xxxxx高潮对白| 超碰人人爱人人| 激情综合闲人网| 国内久久婷婷综合| 2019中文在线观看| 四虎地址8848| 亚洲激情播播| 欧美一激情一区二区三区| 久久久噜噜噜www成人网| 麻豆网在线观看| 2023国产精品自拍| 99re6热在线精品视频播放速度| 五月婷婷视频在线| 牛夜精品久久久久久久99黑人| 精品在线小视频| 亚洲日本黄色片| 成人免费av电影| 一卡二卡欧美日韩| 日韩福利一区二区三区| 亚洲成人一二三区| 久久精品国产一区二区三区免费看| 性色av一区二区三区免费| 国产67194| 欧美色婷婷久久99精品红桃| 精品电影一区二区| 99九九99九九九99九他书对| 亚洲三级欧美| 亚洲午夜影视影院在线观看| 一区二区三区四区| 狠狠色伊人亚洲综合网站l| 成人性生交大合| 国产日韩欧美91| 中文精品久久久久人妻不卡| 久久精品五月| 97视频在线观看播放| 麻豆疯狂做受xxxx高潮视频| 小说区亚洲自拍另类图片专区| 国产一区av在线| 一区二区精品免费| 免费视频亚洲| 亚洲女在线观看| jlzzjizz在线播放观看| 久久97精品| 亚洲国产精品va在线| 特黄特色免费视频| 一区二区三区国产好| 欧美一级黄色录像| 视频区 图片区 小说区| 四虎成人精品一区二区免费网站| 欧美日韩中文字幕一区二区| 亚洲色图 在线视频| 成人国产一区| 欧美美女黄视频| 亚洲av无日韩毛片久久| 国产成人视屏| 日韩丝袜情趣美女图片| 日韩黄色一区二区| 噜噜噜天天躁狠狠躁夜夜精品 | 秋霞av鲁丝片一区二区| 成人高清av在线| 久久国产精品久久精品国产| 三级理论午夜在线观看| 国产亚洲精品7777| 亚洲欧美影院| 尤物在线网址| 精品国产户外野外| 久久国产色av免费观看| 亚洲精品伊人| 日韩欧美的一区二区| 熟妇高潮一区二区| 婷婷综合成人| 中文字幕无线精品亚洲乱码一区| 韩国一级黄色录像| 伊人久久久大香线蕉综合直播| 97香蕉超级碰碰久久免费的优势 | 色综合久久久久网| 亚欧美在线观看| 日韩精品久久久久久久软件91| 精品免费国产一区二区三区四区| 精品人妻一区二区三区日产乱码卜 | 欧美日韩亚洲激情| 亚洲一区精品视频在线观看| 亚洲一区二区三区四区电影| 日韩成人中文电影| 99热99这里只有精品| 亚洲性图久久| 国产精品激情av电影在线观看| 国产理论片在线观看| 91麻豆文化传媒在线观看| 一本一本a久久| ririsao久久精品一区| 91黄视频在线| 成人免费看片载| 波多野结衣的一区二区三区 | 麻豆成人久久精品二区三区红 | 日韩大片一区二区| 狠狠久久伊人| 日韩视频永久免费观看| wwwwww国产| 国产高清精品久久久久| 欧美日韩一区在线观看视频| 日本高清成人vr专区| 欧美亚洲国产怡红院影院| 国产精品福利在线| 国产精品国产一区二区三区四区| 成人动漫精品一区二区| 一区二区精品免费视频| 午夜伦理福利在线| 精品少妇一区二区三区免费观看| 男人的天堂av网| 亚洲美女网站| 91九色偷拍| 色网站免费在线观看| 欧美日韩国产一区二区| 欧美老女人bb| 国产精品久久久久蜜臀| 国产成人一区三区| 亚洲欧美日韩精品永久在线| 一区二区三区四区乱视频| 邪恶网站在线观看| 禁果av一区二区三区| 91av在线看| 亚洲卡一卡二卡三| 亚洲精品自拍动漫在线| 久久国产激情视频| 日韩aaaa| 国产精品青青在线观看爽香蕉| 日韩av高清在线| 偷拍亚洲欧洲综合| 欧美日韩人妻精品一区在线| 欧美日韩一卡| 成人片在线免费看| 影音先锋中文在线视频| 欧美一区二区三区日韩| 国产中文字幕久久| 国内精品写真在线观看| 中文字幕一区二区三区乱码 | 日韩欧美999| 在线观看国产网站| 国产精品五区| 久久资源av| 性高爱久久久久久久久| 国产亚洲欧美aaaa| 亚洲永久精品一区| 国产精品亲子乱子伦xxxx裸| 亚洲第一中文av| 欧美国产一级| 91精品视频播放| free性欧美hd另类精品| 日韩一区二区高清| 久久精品久久精品久久| www.欧美日韩国产在线| av高清在线免费观看| 久久人人爽人人爽人人片av不| 91精品国产91久久久久久久久 | 欧美日韩黄网站| 九九热精品视频国产| 午夜精品在线播放| 天天色图综合网| 精品无码一区二区三区| 日本成人在线不卡视频| 欧美aaa在线观看| 在线日韩成人| 欧美一性一乱一交一视频| 撸视在线观看免费视频| 欧美视频你懂的| 在线免费观看亚洲视频| 成人网男人的天堂| 凹凸日日摸日日碰夜夜爽1| 清纯唯美日韩| av成人观看| 欧美专区福利免费| 久久影院中文字幕| 婷婷五月综合久久中文字幕| 在线影院国内精品| 国产一区二区视频在线观看免费| 成人手机在线视频| 男人天堂成人在线| 自拍日韩欧美| 欧美一区二区三区四区五区六区| 激情久久99| 隔壁老王国产在线精品| 成人在线视频成人| 日韩午夜中文字幕| www.久久久久久久| 亚洲综合久久av| 在线观看福利片| 国产乱码精品一区二区三区忘忧草| 国产真人做爰毛片视频直播| 日本激情一区| 国内精品久久国产| 国产精品1区| 日本道色综合久久影院| 午夜伦理大片视频在线观看| 亚洲欧美日本精品| 成人精品在线播放| 欧美猛男gaygay网站| 中文字幕激情小说| 亚洲影视在线观看| 一级性生活免费视频| wwwwxxxxx欧美| 日韩黄色一区二区| 精品亚洲欧美一区| 日韩手机在线观看视频| 欧美亚洲不卡| 亚洲不卡一卡2卡三卡4卡5卡精品| 精品99re| 国产精品美乳一区二区免费| 欧美a级在线观看| 欧美另类高清videos| 一广人看www在线观看免费视频| 亚洲国产女人aaa毛片在线| 国产精品一区二区免费视频| 91国产成人在线| 日韩少妇高潮抽搐| 一区二区三区波多野结衣在线观看 | 中文字幕乱码人妻二区三区| 婷婷开心久久网| 黄色一级片在线免费观看| 国产精品久久久一区麻豆最新章节| 无码人妻精品一区二区三应用大全| 国产成人精品免费网站| 色网站在线视频| 另类小说综合欧美亚洲| 韩国日本美国免费毛片| 性色av一区二区怡红| 男女私大尺度视频| 激情久久久久久久| 成年人视频网站免费| 99精品视频在线| 一区二区三区电影| 日韩在线观看电影完整版高清免费悬疑悬疑| 久久伊人一区二区| 中文字幕精品影院| 欧美精品一区二区三区久久| 西野翔中文久久精品字幕| 国内精品一区二区| 五月国产精品| 欧美精品二区三区四区免费看视频| 欧美激情网址| 免费成人深夜夜行视频| 亚洲大片精品免费| 久久综合入口| 欧美理论电影大全| 亚洲成人蜜桃| 91av精品| 大荫蒂性生交片| 亚洲精品视频啊美女在线直播| 免费观看美女裸体网站| 午夜一区不卡| 国产精品久久久久9999小说| 日韩精品91亚洲二区在线观看 | 国产一区二区不卡| 丰满少妇中文字幕| 成人动漫视频在线| 最近中文字幕免费视频| 国产日韩综合av| 精品国产国产综合精品| 一区二区三区高清| a v视频在线观看| 一本久久a久久免费精品不卡| 国产免费一级视频| 欧美日韩一区三区| 国产国语亲子伦亲子| 亚洲大胆人体视频| 国产毛片av在线| 精品激情国产视频| 美女日批视频在线观看| 欧美与黑人午夜性猛交久久久| 欧美电影免费观看| 亚洲一区中文字幕在线观看| 国产 日韩 欧美 综合 一区| 麻豆亚洲一区| 图片小说视频色综合| 国产黄色激情视频| 丝瓜av网站精品一区二区| 三级一区二区三区| 成人va在线观看| 丁香激情五月少妇| 亚洲综合免费观看高清完整版 | 国产精品免费一区二区三区观看| 日韩三区视频| 一区二区三区四区免费视频| 亚洲人人精品| 五月婷婷六月丁香激情| 波多野结衣在线aⅴ中文字幕不卡| 少妇久久久久久久久久| 亚洲欧美色图小说| 国产精品视频一区在线观看| 5566中文字幕一区二区电影| 午夜av免费观看| 久久亚洲精品成人| 在线能看的av网址| 99国精产品一二二线| 精品国产91乱码一区二区三区四区 | 岛国在线视频免费看| 伊人青青综合网站| 在线你懂的视频| 日本精品一区二区三区在线| 久久的色偷偷| 日韩女优中文字幕| 激情亚洲网站| 57pao国产成永久免费视频| a级精品国产片在线观看| 天美传媒免费在线观看| 欧美日韩中文字幕综合视频| 国产剧情精品在线| 亚洲性视频网址| 超碰在线cao| 亚洲xxxx在线| 成人影院在线| 97成人在线观看视频| 国产成人亚洲综合a∨婷婷图片| 亚洲一级黄色录像| 色综合久久天天综合网| 色哟哟国产精品色哟哟| 久久国产精品久久国产精品| av有声小说一区二区三区| 国产精品区二区三区日本| 一区二区三区四区日韩| 99sesese| 亚洲国产精品成人综合| 中文字幕视频网| 日韩av中文在线| 多野结衣av一区| 国产麻豆日韩| 欧美激情一级片一区二区| 午夜xxxxx| 中文字幕欧美一区| 一区二区不卡视频在线观看| 在线a欧美视频| av亚洲一区二区三区| 日本高清视频一区二区三区| 老司机一区二区三区| 人妻无码一区二区三区| 婷婷一区二区三区| 人妻91麻豆一区二区三区| 久久久久久亚洲精品不卡| 粉嫩一区二区三区四区公司1| www国产无套内射com| 国产伦精品一区二区三区视频青涩 | 成熟丰满熟妇高潮xxxxx视频| 国产福利精品一区| 激情综合五月网| 日韩精品中文字幕在线不卡尤物| 成人a在线视频免费观看| 91九色极品视频| 亚洲午夜电影| 日韩综合第一页| 精品二区三区线观看| 青青草在线视频免费观看| 欧美最猛性xxxx| 欧美精品一二| 中文字幕丰满乱码| 亚洲欧美色图小说| 国产刺激高潮av| 91超碰中文字幕久久精品| 最近国产精品视频| www.涩涩涩| 亚洲青青青在线视频| 丰满人妻一区二区| 97超级碰碰碰| 欧美伦理在线视频| 中文字幕第10页| 精品成人在线视频| 高清美女视频一区| 91色在线视频| 亚洲精品黄色| www亚洲色图| 欧美一二三在线| 欧美调教sm| 亚洲视频在线二区| 国产成人精品影院| 久久精品视频7| 日韩在线播放视频| 免费成人三级| 日本超碰在线观看| 亚洲国产精品久久不卡毛片| 日本v片在线免费观看| 国产日韩换脸av一区在线观看| 欧美日韩免费观看一区=区三区| 熟妇高潮精品一区二区三区| 欧美日韩在线直播| 欧美videosex性欧美黑吊| 欧美黄色直播| 国产一区二区三区蝌蚪| 久久久久女人精品毛片九一| 精品精品国产国产自在线| 亚州av一区| 日本黄色www| 日本二三区不卡| 日韩经典av|