初看vue3源碼

因爲工作的原因又回到了vue的領域,需要加深對vue和vue生態的瞭解

也許平時比較多人手機看別人解析怎麼看vue源碼的,自己動手看vue源碼的還是比較少,這次我想自己動手看看


首先 吧代碼獲取到本地跑起來

vue 倉庫地址 https://github.com/vuejs/

vue 開發環境 搭建指南 https://github.com/vuejs/core/blob/main/.github/contributing.md#development-setup

正常運行vue3 需要的環境

node 18.12+

pnpm 8+

另外還需要安裝一個ni 工具https://github.com/antfu/ni

一些 本地常用的命令

nr  build 該腳本構建所有公共包

compiler-dom.global.prod.js min:57.9 kB / gzip:21.8 kB / brotli:19.6 kB
reactivity.global.prod.js min:12.3 kB / gzip:4.53 kB / brotli:4.18 kB
runtime-dom.global.prod.js min:85.9 kB / gzip:32.7 kB / brotli:29.5 kB
vue.global.prod.js min:132 kB / gzip:49.4 kB / brotli:44.3 kB
vue.runtime.global.prod.js min:85.9 kB / gzip:32.7 kB / brotli:29.5 kB

nr dev

該腳本在開發模式下以指定格式

packages/vue/dist/vue.global.js   可以看到  默認生成了一個vue 庫的文件

nr dev-sfc

在本地開發模式下啓動 SFC Playground 的快捷方式。這在調試可在 SFC Playground 中重現的問題時提供最快的反饋循環。

本地啓動後的效果和 https://play.vuejs.org/ 一致

nr dev-esm

vue/dist/vue-runtime.esm-bundler.js使用 esbuild 內聯所有部門進行構建和監視。在需要實際構建設置的複製中調試 ESM 構建時,這非常有用:packages/vue全局鏈接,然後將其鏈接到正在調試的項目中。

項目結構

該存儲庫採用monorepo設置,在目錄下託管許多關聯的包packages

  • reactivity:反應系統。它可以作爲與框架無關的包獨立使用。

  • runtime-core:與平臺無關的運行時核心。包括虛擬 dom 渲染器、組件實現和 JavaScript API 的代碼。可以使用此包創建針對特定平臺的高階運行時(即自定義渲染器)。

  • runtime-dom:針對瀏覽器的運行時。包括原生 DOM API、屬性、屬性、事件處理程序等的處理。

  • runtime-test:用於測試的輕量級運行時。可以在任何 JavaScript 環境中使用,因爲它“呈現”純 JavaScript 對象樹。該樹可用於斷言正確的渲染輸出。還提供用於序列化樹、觸發事件和記錄更新期間執行的實際節點操作的實用程序。

  • server-renderer:用於服務器端渲染的包。

  • compiler-core:與平臺無關的編譯器核心。包括編譯器的可擴展基礎和所有與平臺無關的插件。

  • compiler-dom:帶有專門針對瀏覽器的附加插件的編譯器。

  • compiler-sfc:用於編譯 Vue 單文件組件的較低級別實用程序。

  • compiler-ssr:生成針對服務器端渲染優化的渲染函數的編譯器。

  • shared:跨多個包共享的內部實用程序(尤其是運行時包和編譯器包使用的與環境無關的實用程序)。

  • vue:面向公衆的“完整構建”,其中包括運行時和編譯器。

  • 私人實用程序包:

包的依賴關係


vue

可見平時常用的vue api 都是從vue 這個包到處的

另外一些與平臺無關的包 課可以獨立使用

  • reactivity:反應系統。它可以作爲與框架無關的包獨立使用。

  • runtime-core:與平臺無關的運行時核心

例如

import { h } from '@vue/runtime-core'
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章