摘要:框架使用了作為類型檢查,來保證項(xiàng)目的可讀性和維護(hù)性。的主目錄下有的配置文件,還有目錄,指定了各種自定義類型。表示構(gòu)建出來的文件遵循規(guī)范。
Flow
vue框架使用了Flow作為類型檢查,來保證項(xiàng)目的可讀性和維護(hù)性。vue.js的主目錄下有Flow的配置.flowconfig文件,還有flow目錄,指定了各種自定義類型。
在學(xué)習(xí)源碼前可以先看下Flow的語法 官方文檔
目錄結(jié)構(gòu)vue.js源碼主要在src下
src ├── compiler # 編譯相關(guān) ├── core # 核心代碼 ├── platforms # 不同平臺(tái)的支持 ├── server # 服務(wù)端渲染 ├── sfc # .vue 文件解析 ├── shared # 共享代碼compiler
template的編譯
corecore ├── components # 內(nèi)置組件 ├── global-api # 全局 API 封裝 ├── instance # Vue 實(shí)例化,生命周期 ├── observer # 觀察者,響應(yīng)式 ├── util # 工具函數(shù) ├── vdom # virtual DOMplatform
存放2個(gè)主要入口,分別打包運(yùn)行在web和weex上的vue.js
server支持了服務(wù)端渲染
sfc把.vue文件內(nèi)容解析成js對(duì)象
shared存放共享方法
vue.js構(gòu)建vue是基于Rollup構(gòu)建的,類似于webpack
首先來看下package.json文件,先看下script字段:
{ "script":{ "build": "node scripts/build.js", "build:ssr": "npm run build -- web-runtime-cjs,web-server-renderer", "build:weex": "npm run build -- weex", } }
這3條都是構(gòu)建vue的命令,后2條是根據(jù)需求添加對(duì)應(yīng)環(huán)境參數(shù)。運(yùn)行npm run build時(shí)會(huì)執(zhí)行node scripts/build.js
構(gòu)建過程構(gòu)建過程比較復(fù)雜,這里會(huì)簡化下構(gòu)建過程,只分析主線流程
進(jìn)入到scripts/build.js,// 從配置文件讀取配置,拿到所有構(gòu)建的path let builds = require("./config").getAllBuilds() // 過濾builds build(builds)
再看下配置文件scripts.config.js,
let builds= { "web-runtime-esm": { entry: resolve("web/entry-runtime.js"), dest: resolve("dist/vue.runtime.esm.js"), format: "es", banner }, }
entry 屬性表示構(gòu)建的入口 JS 文件地址,dest 屬性表示構(gòu)建后的 JS 文件地址。format 屬性表示構(gòu)建的格式,cjs 表示構(gòu)建出來的文件遵循 CommonJS 規(guī)范,es 表示構(gòu)建出來的文件遵循 ES Module 規(guī)范。 umd 表示構(gòu)建出來的文件遵循 UMD 規(guī)范。
resolve看下 resovle 方法的定義
const resolve = p => { const base = p.split("/")[0] if (aliases[base]) { return path.resolve(aliases[base], p.slice(base.length + 1)) } else { return path.resolve(__dirname, "../", p) } }
用到了 path.resolve([... paths]), path.resolve 是 node.js 提供的路徑解析方法,可以看下官方文檔了解下,主要是從右到左處理給定的路徑序列,直到構(gòu)造出絕對(duì)路徑.
用resolve("web/entry-runtime.js")作分析, base 是 web , 找到 aliases[base] 即真實(shí)路徑 "../src/platforms/web" ,
entry: resolve("web/entry-runtime.js")所以最終入口路徑是 ../src/platforms/web/entry-runtime.js,構(gòu)建生成文件路徑是../dist/vue.runtime.esm.js
genConfig()輸入builds前要先將builds轉(zhuǎn)換成rollup打包所對(duì)應(yīng)的配置結(jié)構(gòu)
if (process.env.TARGET) { module.exports = genConfig(process.env.TARGET) } else { exports.getBuild = genConfig // 返回config組成的數(shù)組 exports.getAllBuilds = () => Object.keys(builds).map(genConfig) }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/100841.html
摘要:提供了兩種向組件傳遞參數(shù)的方式。子路由項(xiàng)路徑不要使用開頭,以開頭的嵌套路徑會(huì)被當(dāng)作根路徑。路由實(shí)例的方法這里學(xué)習(xí)兩個(gè)路由實(shí)例的方法和。實(shí)際上,是通過不同的將這些資源加載后打包,然后輸出打包后文件。 一、vue-router 1、簡介 我們經(jīng)常使用vue開發(fā)單頁面應(yīng)用程序(SPA)。在開發(fā)SPA過程中,路由是必不可少的部分,vue的官方推薦是vue-router。單頁面應(yīng)用程序看起來好像...
摘要:提供了兩種向組件傳遞參數(shù)的方式。子路由項(xiàng)路徑不要使用開頭,以開頭的嵌套路徑會(huì)被當(dāng)作根路徑。路由實(shí)例的方法這里學(xué)習(xí)兩個(gè)路由實(shí)例的方法和。實(shí)際上,是通過不同的將這些資源加載后打包,然后輸出打包后文件。 一、vue-router 1、簡介 我們經(jīng)常使用vue開發(fā)單頁面應(yīng)用程序(SPA)。在開發(fā)SPA過程中,路由是必不可少的部分,vue的官方推薦是vue-router。單頁面應(yīng)用程序看起來好像...
摘要:哪吒社區(qū)技能樹打卡打卡貼函數(shù)式接口簡介領(lǐng)域優(yōu)質(zhì)創(chuàng)作者哪吒公眾號(hào)作者架構(gòu)師奮斗者掃描主頁左側(cè)二維碼,加入群聊,一起學(xué)習(xí)一起進(jìn)步歡迎點(diǎn)贊收藏留言前情提要無意間聽到領(lǐng)導(dǎo)們的談話,現(xiàn)在公司的現(xiàn)狀是碼農(nóng)太多,但能獨(dú)立帶隊(duì)的人太少,簡而言之,不缺干 ? 哪吒社區(qū)Java技能樹打卡?【打卡貼 day2...
閱讀 1377·2021-09-24 10:26
閱讀 1689·2019-08-30 14:14
閱讀 2098·2019-08-29 16:54
閱讀 362·2019-08-29 14:09
閱讀 1467·2019-08-29 12:55
閱讀 922·2019-08-28 18:13
閱讀 1572·2019-08-26 13:39
閱讀 2559·2019-08-26 11:43