成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Vue源碼學(xué)習(xí)(一)——追根究底Vue

Harriet666 / 850人閱讀

摘要:其中執(zhí)行命令是我們當(dāng)前所關(guān)注的,對于項(xiàng)目的文件結(jié)構(gòu),我們需要去找到項(xiàng)目的啟動的入口文件,接下來我們?nèi)ヒ徊揭徊降恼业椒治雒钍且粋€模塊打包器。

打算開始學(xué)習(xí)vue的源碼開始,我開始 serach 關(guān)鍵詞:vue 源碼,可是發(fā)現(xiàn)很多都不是我想要看到的東西,所以打算記錄下來,學(xué)習(xí)的記錄和日后分享。我在想這個文章的名字時,手把手系列?十分鐘系列?小白到大佬系列?都不是,只是單純的學(xué)習(xí)筆記
文件結(jié)構(gòu)

當(dāng)我從 githubclone Vue 源碼后,我看到很多熟悉的文件夾命名,以及配置文件,但對于我個小菜雞,我還是想整體了解一下每個文件夾的內(nèi)容,然后再去深挖~
有些我自己現(xiàn)在還不是很懂的后續(xù)再補(bǔ)上~

├─benchmarks
├─dist   打包后文件目錄
├─examples 部分示例
├─flow  聲明靜態(tài)類型
├─packages  vue可被分成的其他npm包
│  ├─vue-server-renderer
│  ├─vue-template-compiler
│  ├─weex-template-compiler
│  └─weex-vue-framework
├─scripts 
├─src   主要源碼
│  ├─compiler
│  ├─core   核心代碼
│  ├─platforms  平臺相關(guān)內(nèi)容
│  ├─server 服務(wù)端渲染相關(guān)
│  ├─sfc
│  └─shared
├─test  測試用例
└─types 類型定義
    └─test
從入口文件開始

首先,我們拿到一個文件后,我們應(yīng)該養(yǎng)成習(xí)慣去查看項(xiàng)目根目錄下的package.json文件。文件的基本構(gòu)成:項(xiàng)目名稱、版本、描述、執(zhí)行命令、項(xiàng)目依賴等。
其中執(zhí)行命令 script是我們當(dāng)前所關(guān)注的,對于項(xiàng)目的文件結(jié)構(gòu),我們需要去找到項(xiàng)目的啟動的入口文件,接下來我們?nèi)ヒ徊揭徊降恼业?strong>vue

分析命令
"scripts": {
  "dev": "rollup -w -c scripts/config.js --environment TARGET:web-full-dev"
}

rollup是一個 JavaScript 模塊打包器。感興趣的話可以去具體的研究,這里我們不做具體的探究。那我們知道這里它存在的作用就是對js進(jìn)行打包處理。

我們來具體看一下這個命令的含義:

-w watch 監(jiān)聽源文件是否有改動,有改動重新打包

-c config 使用配置文件 scripts/config.js

--environment 傳遞給配置文件的環(huán)境變量,這里傳遞的是目標(biāo)文件 TARGET

根據(jù)以上,我們可以得知,該命令為使用 scripts/config.js中的配置文件去打包 TARGET:web-full-dev,我們想知道這個targt 具體指的是什么,我們需要去看一下config配置文件

層層遞進(jìn)

1.scriptsconfig.js 中我們可以找到,最下方為該文件的js執(zhí)行部分,其中先去判斷了我們所傳入的Target,然后調(diào)用了genConfig

//  判斷傳入的環(huán)境變量
if (process.env.TARGET) {
  module.exports = genConfig(process.env.TARGET)
} 

2.我們繼續(xù)往上看,genconfig根據(jù)函數(shù)名我們可以得知,為獲取config這樣的一個功能,Target為傳入的name,文件的上方定義了 builds,一個屬性對應(yīng)一個Target*,這樣我們可以找到我們專注的web-full-dev

// builds 對象,屬性名對應(yīng)Target
const builds = {
  // ...

  // Runtime+compiler development build (Browser)
  "web-full-dev": {
    entry: resolve("web/entry-runtime-with-compiler.js"),
    dest: resolve("dist/vue.js"),
    format: "umd",
    env: "development",
    alias: { he: "./entity-decoder" },
    banner
  }

  // ...
}

// ...

// 這里傳入的name 就是Target
function genConfig (name) {
  const opts = builds[name]
  // ... other config
}

從上可以看出,我們需要的是入口文件即entry中對應(yīng)的web/entry-runtime-with-compiler.js

3.打開entry-runtime-with-compiler.js, 在文件上方,我們可以看到這個文件中import Vue,我們所需要的是去追根到Vue的起始,所以就找到了上一層runtime/index

// 引入了Vue的實(shí)例
import Vue from "./runtime/index"

4.打開上一步我們找到的src/platforms/web/runtime/index.js 文件,第一行就引入了import Vue from "core/index"
沒關(guān)系我們繼續(xù),酒香不怕巷子深
5.srccoreindex.js

// 又一次是引入了Vue的實(shí)例
import Vue from "./instance/index"

6.src/core/instanceindex.js,驚喜~ ,在這里我們找到了Vue的構(gòu)造函數(shù),構(gòu)造函數(shù)中僅調(diào)用了init方法,_init方法哪里來的呢,當(dāng)然是文件下方在Vue原型上綁定的方法,接下來我們會以一個的去

// Vue的構(gòu)造函數(shù)
function Vue (options) {
  //... 驗(yàn)證環(huán)境
  this._init(options)
}

// 在Vue原型上綁定實(shí)例方法
initMixin(Vue)  // init
stateMixin(Vue)  // $set $delete $watch
eventsMixin(Vue)  // $on $once $off $emit
lifecycleMixin(Vue)  // _update $forceUpdate $destroy
renderMixin(Vue)  // $nextTick _render
總結(jié)

綜上,小結(jié)一下追根過程

package.json
--> scripts/config.js
--> web/entry-runtime-with-compiler.js
--> src/platforms/web/runtime/index.js
--> src/core/index.js
--> src/core/instance/index.js

下一篇 :Vue源碼學(xué)習(xí)(二)——從宏觀看Vue

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/99792.html

相關(guān)文章

  • javascript基礎(chǔ)-Vue數(shù)據(jù)綁定前奏對象屬性

    摘要:關(guān)于有人說我用刪除這個屬性不就好了之后打印發(fā)現(xiàn)它還是一只哈士奇。如下的解釋如下操作符會從某個對象上移除指定屬性。 javascript-Object-Property ? javascript-對象的屬性的延伸學(xué)習(xí) showImg(https://segmentfault.com/img/bVNH2S?w=640&h=640); 前言 在學(xué)習(xí)vue數(shù)據(jù)綁定的較底層原理時,被setter...

    zebrayoung 評論0 收藏0
  • 小白成長日記:寫個日歷

    摘要:一周有天,返回的數(shù),如果上月最后一天是星期二,看下的日歷是補(bǔ)了三天,我們得到的是,所以為此,之后就是填充最后一天,用處理一下再排序,上一個月的數(shù)據(jù)就得到了。 每天進(jìn)步一點(diǎn)點(diǎn)。寫個簡單的小日歷,依舊用vue,方便 完成圖 showImg(https://segmentfault.com/img/bVZoWs?w=416&h=495); 思路 本月的天數(shù) 截取上月的天數(shù) 截取下月天數(shù) 今...

    muzhuyu 評論0 收藏0
  • 前方來報(bào),八月最新資訊--關(guān)于vue2&3的最佳文章推薦

    摘要:哪吒別人的看法都是狗屁,你是誰只有你自己說了才算,這是爹教我的道理。哪吒去他個鳥命我命由我,不由天是魔是仙,我自己決定哪吒白白搭上一條人命,你傻不傻敖丙不傻誰和你做朋友太乙真人人是否能夠改變命運(yùn),我不曉得。我只曉得,不認(rèn)命是哪吒的命。 showImg(https://segmentfault.com/img/bVbwiGL?w=900&h=378); 出處 查看github最新的Vue...

    izhuhaodev 評論0 收藏0
  • vue源碼學(xué)習(xí))——從入口開始

    摘要:學(xué)習(xí)源碼時,我們首先需要看的是文件,該文件里配置了的依賴以及開發(fā)環(huán)境和生產(chǎn)環(huán)境的編譯的啟動腳本等其他信息。一個是完整版,一個是運(yùn)行時。運(yùn)行時用來創(chuàng)建實(shí)例渲染并處理虛擬等的代碼。基本上就是除去編譯器的其它一切。 學(xué)習(xí)vue源碼時,我們首先需要看的是package.json文件,該文件里配置了vue的依賴以及開發(fā)環(huán)境和生產(chǎn)環(huán)境的編譯的啟動腳本等其他信息。首先我們需要關(guān)注的是script。我...

    ybak 評論0 收藏0
  • vue 源碼學(xué)習(xí)) 目錄結(jié)構(gòu)和構(gòu)建過程簡介

    摘要:框架使用了作為類型檢查,來保證項(xiàng)目的可讀性和維護(hù)性。的主目錄下有的配置文件,還有目錄,指定了各種自定義類型。表示構(gòu)建出來的文件遵循規(guī)范。 Flow vue框架使用了Flow作為類型檢查,來保證項(xiàng)目的可讀性和維護(hù)性。vue.js的主目錄下有Flow的配置.flowconfig文件,還有flow目錄,指定了各種自定義類型。 在學(xué)習(xí)源碼前可以先看下Flow的語法 官方文檔 目錄結(jié)構(gòu) vue....

    lavnFan 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<