国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

lavnFan / 718人閱讀

摘要:框架使用了作為類型檢查,來保證項(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的編譯

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

存放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.resolvenode.js 提供的路徑解析方法,可以看下官方文檔了解下,主要是從右到左處理給定的路徑序列,直到構(gòu)造出絕對(duì)路徑.

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打包所對(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

相關(guān)文章

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

    摘要:提供了兩種向組件傳遞參數(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)用程序看起來好像...

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

    摘要:提供了兩種向組件傳遞參數(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)用程序看起來好像...

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

    Scorpion 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<