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

資訊專欄INFORMATION COLUMN

vue 源碼學(xué)習(xí)(一) 目錄結(jié)構(gòu)和構(gòu)建過程簡介

lavnFan / 734人閱讀

摘要:框架使用了作為類型檢查,來保證項(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       # 不同平臺的支持
├── server          # 服務(wù)端渲染
├── sfc             # .vue 文件解析
├── shared          # 共享代碼
compiler

template的編譯

core
core
├── components     # 內(nèi)置組件
├── global-api     # 全局 API 封裝 
├── instance       # Vue 實(shí)例化,生命周期
├── observer       # 觀察者,響應(yīng)式
├── util           # 工具函數(shù)
├── vdom           # virtual DOM
platform

存放2個主要入口,分別打包運(yùn)行在web和weex上的vue.js

server

支持了服務(wù)端渲染

sfc

把.vue文件內(nèi)容解析成js對象

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ù)需求添加對應(yīng)環(huán)境參數(shù)。運(yùn)行npm run build時會執(zhí)行node scripts/build.js

構(gòu)建過程

構(gòu)建過程比較復(fù)雜,這里會簡化下構(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.resolvenode.js 提供的路徑解析方法,可以看下官方文檔了解下,主要是從右到左處理給定的路徑序列,直到構(gòu)造出絕對路徑.

resolve("web/entry-runtime.js")作分析, baseweb , 找到 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打包所對應(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)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

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

相關(guān)文章

  • vue學(xué)習(xí)筆記(四)

    摘要:提供了兩種向組件傳遞參數(shù)的方式。子路由項(xiàng)路徑不要使用開頭,以開頭的嵌套路徑會被當(dāng)作根路徑。路由實(shí)例的方法這里學(xué)習(xí)兩個路由實(shí)例的方法和。實(shí)際上,是通過不同的將這些資源加載后打包,然后輸出打包后文件。 一、vue-router 1、簡介 我們經(jīng)常使用vue開發(fā)單頁面應(yīng)用程序(SPA)。在開發(fā)SPA過程中,路由是必不可少的部分,vue的官方推薦是vue-router。單頁面應(yīng)用程序看起來好像...

    frank_fun 評論0 收藏0
  • vue學(xué)習(xí)筆記(四)

    摘要:提供了兩種向組件傳遞參數(shù)的方式。子路由項(xiàng)路徑不要使用開頭,以開頭的嵌套路徑會被當(dāng)作根路徑。路由實(shí)例的方法這里學(xué)習(xí)兩個路由實(shí)例的方法和。實(shí)際上,是通過不同的將這些資源加載后打包,然后輸出打包后文件。 一、vue-router 1、簡介 我們經(jīng)常使用vue開發(fā)單頁面應(yīng)用程序(SPA)。在開發(fā)SPA過程中,路由是必不可少的部分,vue的官方推薦是vue-router。單頁面應(yīng)用程序看起來好像...

    lwx12525 評論0 收藏0
  • Java學(xué)習(xí)路線總結(jié),搬磚工逆襲Java架構(gòu)師(全網(wǎng)最強(qiáng))

    摘要:哪吒社區(qū)技能樹打卡打卡貼函數(shù)式接口簡介領(lǐng)域優(yōu)質(zhì)創(chuàng)作者哪吒公眾號作者架構(gòu)師奮斗者掃描主頁左側(cè)二維碼,加入群聊,一起學(xué)習(xí)一起進(jìn)步歡迎點(diǎn)贊收藏留言前情提要無意間聽到領(lǐng)導(dǎo)們的談話,現(xiàn)在公司的現(xiàn)狀是碼農(nóng)太多,但能獨(dú)立帶隊的人太少,簡而言之,不缺干 ? 哪吒社區(qū)Java技能樹打卡?【打卡貼 day2...

    Scorpion 評論0 收藏0

發(fā)表評論

0條評論

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