最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入解析vue 源碼目錄及構(gòu)建過程分析

 更新時間:2019年04月24日 16:48:58   作者:wolfSoul  
這篇文章主要介紹了vue 源碼目錄及構(gòu)建過程分析,非常不錯,具有一定的參考借鑒價值 ,需要的朋友可以參考下

​“ 本文主要梳理一下vue代碼的目錄,以及vue代碼構(gòu)建流程,旨在對vue源碼整體有一個認知,有助于后續(xù)對源碼的閱讀?!?/p>

一、目錄結(jié)構(gòu)

上圖是對vue的代碼的所有目錄進行的梳理,其中源碼位于src目錄下,下面對src下的目錄進行介紹。

compiler

該目錄是編譯相關(guān)的代碼,即將 template 模板轉(zhuǎn)化成 render 函數(shù)的代碼。

vue 提供了 render 函數(shù),render 函數(shù)作用是用來創(chuàng)建 VNode,但在平時開發(fā)中,絕大多數(shù)情況下使用 template 來創(chuàng)建 HTML,所以需要將 template模板編譯成 render 函數(shù)。

編譯工作既可以在代碼構(gòu)建時做,也可以在客戶端運行時做,但編譯十分消耗性能,所以在項目中建議使用 runtime 版本。

core

這部分代碼是 vue 的核心代碼,可以說是 vue 的靈魂所在,也是我們要重點學(xué)習(xí)的源碼。

core目錄又包含如下子目錄。

•components -- 內(nèi)置組件的代碼,即 keep-alive 代碼

•global-api -- 全局API代碼,mixin,extend 等 api 在這里實現(xiàn)

•instance -- vue實例化相關(guān)代碼,包括初始化,事件,生命周期,渲染等部分的代碼

•observer -- 響應(yīng)式數(shù)據(jù)相關(guān)代碼

•util -- 工具方法

•vdom -- 虛擬 dom 的代碼。

platforms

platforms下包含兩個子目錄,web 和 weex。

分別代表可以打包生成在web端使用的 vue 代碼和在native端使用的 weex 代碼。美團開源的開發(fā)微信小程序的 mpvue 框架也是在這個目錄下進行拓展的。

通過不同平臺的入口就可以打包出運行在不同平臺的版本的 vue 文件,后面代碼構(gòu)建部分會介紹具體的構(gòu)建過程。

server

該目錄下是 SSR 相關(guān)的代碼。

Vue.js 是構(gòu)建客戶端應(yīng)用程序的框架。除了可以在瀏覽器中輸出 Vue 組件,也可以將同一個組件渲染為服務(wù)器端的 HTML 字符串,將它們直接發(fā)送到瀏覽器,最后將這些靜態(tài)標記"激活"為客戶端上完全可交互的應(yīng)用程序。

sfc

我們平時開發(fā)時,都是寫 .vue 文件。sfc 的代碼就是提供一個解析器,把.vue文件代碼解析成一個 javascript 對象。

shared

該目錄下定義了一些公用的工具方法,提供給上面的幾個目錄內(nèi)代碼使用。

二、源碼編譯

vue的源碼按照功能拆分的十分清晰,每個功能都有單獨的目錄,那么項目中引用的vue文件是怎么編譯出來的呢?

首先,我們看一下編譯輸出的dist目錄。

可以看到,dist下有10幾種不同版本的vue文件,他們是根據(jù)不同規(guī)范(包括 CommonJS規(guī)范,ES Module,UMD)和 是否包含編譯器 構(gòu)建出的不同版本。

vue源碼選擇了rollup進行構(gòu)建,rollup相比于webpack,更加輕量,編譯后的代碼更加干凈,更適合javascript庫的構(gòu)建,除了vue以外,像React,Ember,D3,Three.js 以及其他很多開源庫也選擇了Rollup 進行構(gòu)建。

下面看一下vue具體構(gòu)建過程,首先到pakage.json中看下vue編譯執(zhí)行的命令。

從命令可以看出,構(gòu)建命令就是執(zhí)行 scripts 目錄下 build.js 文件。

下面是 scripts/build.js 核心代碼(下文中漢字注釋部分是為方便理解自己補充的)

從代碼可以看出,首先通過 script/config.js 文件的getAllBuilds方法獲取配置,然后根據(jù)構(gòu)建命令傳入的參數(shù)對配置進行過濾,最后根據(jù)過濾后的配置執(zhí)行build函數(shù),編譯出對應(yīng)版本的vue文件。(這里介紹代碼構(gòu)建的過程,主要說明vue是怎么構(gòu)建出不同版本代碼的,build方法在此不做分析)

接下來我們在看一下配置文件 script/config.js 中的 getAllBuilds 是怎么獲取具體配置的。

可以看出,getAllBuilds 方法首先通過 Object.keys 拿到 builds 對象所有key的組成的數(shù)組,并通過map遍歷執(zhí)行g(shù)enConfig方法。下面我們先看一下builds對象。

可以看出,builds對象是不同版本vue的編譯配置。具體配置項的作用,已經(jīng)用注釋在代碼中標出。接下來我們看下genConfig函數(shù)做了什么。

genConfig 通過 key 拿到 builds 中每個key對應(yīng)的配置對象,然后根據(jù)這個對象重新定義一個 config 對象,這個 config 對象的結(jié)構(gòu)才是 rollup 配置真正需要的結(jié)構(gòu)。

看了 builds 對象和 genConfig 方法,我們就知道了 getAllBuilds 的目的,是通過映射把 builds 配置對象轉(zhuǎn)化成 rollup 所需要的配置數(shù)據(jù)。

到這里,我們就清楚是如何構(gòu)建出不同版本的vue代碼了。

三、心得

學(xué)習(xí)源碼時,不建議按照源碼的順序一行一行的閱讀。首先要抓住主干,先梳理清楚主要的代碼邏輯,再去仔細閱讀具體的每行代碼。另外按照源碼順序閱讀可能很枯燥,很難堅持下來,可以先選擇自己感興趣的部分進行學(xué)習(xí),最后再串聯(lián)起來。

相關(guān)文章

  • vue3選項式api如何監(jiān)控數(shù)組變化

    vue3選項式api如何監(jiān)控數(shù)組變化

    這篇文章主要介紹了vue3選項式api如何監(jiān)控數(shù)組變化問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Vue2路由動畫效果的實現(xiàn)代碼

    Vue2路由動畫效果的實現(xiàn)代碼

    本篇文章主要介紹了Vue2路由動畫效果的實現(xiàn)代碼,可以根據(jù)不同的路徑去改變動畫的效果,有興趣的可以了解一下
    2017-07-07
  • vant遇到van-sidebar數(shù)據(jù)超出不能滑動的問題

    vant遇到van-sidebar數(shù)據(jù)超出不能滑動的問題

    這篇文章主要介紹了vant遇到van-sidebar數(shù)據(jù)超出不能滑動的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • 在Vue中實現(xiàn)深度監(jiān)聽的示例代碼

    在Vue中實現(xiàn)深度監(jiān)聽的示例代碼

    在 Vue 中,深度監(jiān)聽是指監(jiān)聽一個對象或數(shù)組的嵌套屬性(深層結(jié)構(gòu))的變化,而不僅僅是監(jiān)聽頂層屬性的引用變化,本文給大家介紹了如何在Vue中實現(xiàn)深度監(jiān)聽,并通過代碼示例介紹的非常詳細,需要的朋友可以參考下
    2025-03-03
  • vue3+electron12+dll開發(fā)客戶端配置詳解

    vue3+electron12+dll開發(fā)客戶端配置詳解

    本文將結(jié)合實例代碼,介紹vue3+electron12+dll客戶端配置,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-06-06
  • 基于vue.js中事件修飾符.self的用法(詳解)

    基于vue.js中事件修飾符.self的用法(詳解)

    下面小編就為大家分享一篇基于vue.js中事件修飾符.self的用法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02
  • vue中el-input綁定鍵盤按鍵(按鍵修飾符)

    vue中el-input綁定鍵盤按鍵(按鍵修飾符)

    這篇文章主要介紹了vue中el-input綁定鍵盤按鍵(按鍵修飾符),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • elementplus實現(xiàn)多級表格(最后一級展示圖片)

    elementplus實現(xiàn)多級表格(最后一級展示圖片)

    本文主要介紹了elementplus實現(xiàn)多級表格(最后一級展示圖片),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • vue實現(xiàn)輪播圖幀率播放

    vue實現(xiàn)輪播圖幀率播放

    這篇文章主要為大家詳細介紹了vue實現(xiàn)輪播圖幀率播放,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • 詳談vue+webpack解決css引用圖片打包后找不到資源文件的問題

    詳談vue+webpack解決css引用圖片打包后找不到資源文件的問題

    下面小編就為大家分享一篇詳談vue+webpack解決css引用圖片打包后找不到資源文件的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03

最新評論

新化县| 棋牌| 江阴市| 岳池县| 开化县| 广南县| 浑源县| 乌鲁木齐县| 抚州市| 永川市| 疏勒县| 民勤县| 错那县| 廉江市| 灵璧县| 枞阳县| 阳城县| 琼结县| 盱眙县| 杭锦旗| 文昌市| 怀宁县| 镇巴县| 鱼台县| 安庆市| 河间市| 修文县| 三河市| 无棣县| 吴桥县| 长汀县| 盐亭县| 盐城市| 云安县| 城市| 炎陵县| 永和县| 新宁县| 迁安市| 东山县| 石棉县|