国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

你可能從未使用過的調(diào)試 Vue3 (開源項目) 源碼的方式

這篇具有很好參考價值的文章主要介紹了你可能從未使用過的調(diào)試 Vue3 (開源項目) 源碼的方式。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

????1. 前言

大家好,我是若川。我傾力持續(xù)組織了一年多源碼共讀,感興趣的可以加我微信 lxchuan12 參與。另外,想學源碼,極力推薦關(guān)注我寫的專欄《學習源碼整體架構(gòu)系列》,目前是掘金關(guān)注人數(shù)(4.7k+人)第一的專欄,寫有20余篇源碼文章。

2. 看開源項目學習是怎樣的步驟?

看一個開源倉庫,第一步一般是看 README.mdcontributing.md 貢獻指南文檔。

README.md 中一般有提到貢獻指南文檔的鏈接的。貢獻指南文檔就是為了讓別人參與項目貢獻。

而貢獻指南寫了很多關(guān)于參與項目開發(fā)的信息。比如怎么跑起來,項目目錄結(jié)構(gòu)是怎樣的。怎么投入開發(fā),需要哪些知識儲備等。

第二步的克隆下來。按照貢獻指南文檔,把項目跑起來。

3. 如何調(diào)試 vue3 源碼

我們這次來學調(diào)試 vue3 源碼,看 vue3 源碼[1]倉庫 contributing.md[2]。

contributing.md 部分內(nèi)容

Development Setup

You will need Node.js[3]version 16+, and PNPM[4]version 7+.

We also recommend installing ni[5] to help switching between repos using different package managers. ni also provides the handy nr command which running npm scripts easier.

After cloning the repo, run:

$?pnpm?i?#?install?the?dependencies?of?the?project

關(guān)于上方提到的 ni,我曾經(jīng)寫過源碼文章,可供參考。

尤雨溪推薦神器 ni ,能替代 npm/yarn/pnpm ?簡單好用!源碼揭秘!

從貢獻指南中,我們可以得知一些信息,那么先來克隆項目安裝依賴。

git?clone?https://github.com/vuejs/core.git
cd?core
#?安裝依賴
pnpm?i

4. 使用 vitest vscode 擴展的調(diào)試方式

安裝vitest vscode 擴展鏈接[6]、vitest vscode 擴展 github[7]

安裝vitest-runner vscode 擴展鏈接[8]、vitest-runner vscode 擴展 github[9]

調(diào)試vue3源碼,vue.js,vscode,前端,javascript,ecmascript
vitest-vscode 安裝
調(diào)試vue3源碼,vue.js,vscode,前端,javascript,ecmascript
debugger.png
調(diào)試vue3源碼,vue.js,vscode,前端,javascript,ecmascript
debugger-test.png
//?packages/vue/__tests__/index.spec.ts
import?{?vi?}?from?'vitest'
import?{?EMPTY_ARR?}?from?'@vue/shared'
import?{?createApp,?ref,?nextTick,?reactive?}?from?'../src'

describe('compiler?+?runtime?integration',?()?=>?{
??it('should?support?runtime?template?compilation',?()?=>?{
????const?container?=?document.createElement('div')
????const?App?=?{
??????template:?`{{?count?}}`,
??????data()?{
????????return?{
??????????count:?0
????????}
??????}
????}
?//?可以按住?alt?+?鼠標左鍵點擊?跳轉(zhuǎn)到函數(shù),提前斷點好想斷點的地方
????createApp(App).mount(container)
????expect(container.innerHTML).toBe(`0`)
??})
??//?省略若干代碼
}

如下圖 gif 圖所示,就是調(diào)試 vue 源碼了。

調(diào)試vue3源碼,vue.js,vscode,前端,javascript,ecmascript

gif 圖調(diào)試源碼

關(guān)于 gif 圖中頂部各個按鈕的作用,我曾經(jīng)寫過一篇文章新手向:前端程序員必學基本技能——調(diào)試JS代碼

通過開源項目的測試用例調(diào)試源碼,它的優(yōu)點在于不用打包、更接近源碼,測試覆蓋率高的開源項目,可以只針對某項功能做針對性調(diào)試,看測試用例的過程中也能直接學會使用。而這種調(diào)試方式,可能是大部分人從未使用過的調(diào)試源碼方式,因為大多數(shù)人可能沒學過測試框架。

Vue 源碼的測試用例現(xiàn)在改成了 Vitest[10]

同理可得,如果開源項目是使用 Jest 測試框架,可以安裝 `Jest`[11]、`Jest Runner`[12]vscode 插件。

5. 通過生成 sourcemap 調(diào)試

5.1 如何生成 sourcemap

貢獻指南的文檔 contributing.md[13] 中有寫:

Build with Source Maps

Use the --sourcemap or -s flag to build with source maps. Note this will make the build much slower.

pnpm?run?build?-s

執(zhí)行后,所有的都生成了 sourcemap 文件,如下圖所示。

調(diào)試vue3源碼,vue.js,vscode,前端,javascript,ecmascript
vue sourcemap

通過 sourcemap 文件,可以找到原始文件信息。

我們可以在根目錄下的 package.json 中,看到有一個啟動服務(wù)的命令。

{
??"private":?true,
??"version":?"3.3.0-alpha.4",
??"packageManager":?"pnpm@7.26.0",
??"type":?"module",
??"scripts":?{
????"serve":?"serve",
??},
}

這時再在命令行終端,執(zhí)行這條命令,啟動服務(wù)。

pnpm?run?serve
調(diào)試vue3源碼,vue.js,vscode,前端,javascript,ecmascript
serve.png

瀏覽器打開 http://localhost:5000 可以找到相應(yīng)路徑。

比如我們打開這個源碼中有的 todomvc 例子,來調(diào)試。http://localhost:64085/packages/vue/examples/composition/todomvc

//?packages/vue/examples/composition/todomvc.html
<script?src="../../dist/vue.global.js"></script>
<script>
const?{?createApp,?reactive,?computed,?watchEffect,?onMounted,?onUnmounted?}?=?Vue
//?省略若干代碼
//?我們可以在這里斷點調(diào)試
createApp({
??setup?()?{
????//?省略若干代碼
}).mount('#app')

文件開頭首先引入了文件vue.global.js,其底部注釋表明了 sourcemap 文件 URL。

//?../../dist/vue.global.js
var?Vue?=?(function?(exports)?{})({});
//#?sourceMappingURL=vue.global.js.map

我們可以在 createApp 函數(shù)處斷點調(diào)試,createApp 函數(shù)里再斷點調(diào)試,就是調(diào)試原來本身的源碼。也和上文提到的vitest vscode 插件 一樣調(diào)試。

調(diào)試vue3源碼,vue.js,vscode,前端,javascript,ecmascript
chrome-debugger

調(diào)試如下圖 gif 圖所示。

調(diào)試vue3源碼,vue.js,vscode,前端,javascript,ecmascript

chrome-debugger-gif.gif

至此,我們就也學會了根據(jù)項目中提供的命令通過生成 sourcemap 文件和調(diào)試源碼。

5.2 為何貢獻指南中寫的方式就能生成 sourcemap ?

有小伙伴可能會好奇,為啥貢獻指南,pnpm run build 編譯加參數(shù) --sourcemap 或者 -s 就能生成 sourcemap 呢。我們接下來探究下為啥 --sourcemap 或者 -s 就能生成 sourcemap 呢。

查看項目根目錄下的 package.json 的文件,我們可以得知:build 命令,實際執(zhí)行的是node scripts/build.js。

{
??"private":?true,
??"version":?"3.3.0-alpha.4",
??"packageManager":?"pnpm@7.26.0",
??"type":?"module",
??"scripts":?{
????"dev":?"node?scripts/dev.js",
????"build":?"node?scripts/build.js",
??},
}

找到這個文件 scripts/build.js。

//?scripts/build.js
import?minimist?from?'minimist'
import?execa?from?'execa'

const?args?=?minimist(process.argv.slice(2))

const?sourceMap?=?args.sourcemap?||?args.s

async?function?build(target)?{
??//???省略若干代碼
??const?env?=
????(pkg.buildOptions?&&?pkg.buildOptions.env)?||
????(devOnly???'development'?:?'production')
??await?execa(
????'rollup',
????[
??????'-c',
??????'--environment',
??????[
????????`COMMIT:${commit}`,
????????`NODE_ENV:${env}`,
????????`TARGET:${target}`,
????????formats???`FORMATS:${formats}`?:?``,
????????prodOnly???`PROD_ONLY:true`?:?``,
????????sourceMap???`SOURCE_MAP:true`?:?``
??????]
????????.filter(Boolean)
????????.join(',')
????],
????{?stdio:?'inherit'?}
??)
}

minimist[14] 是解析命令行參數(shù)。execa[15] 是子進程執(zhí)行命令。

相當于在命令行終端執(zhí)行rollup[16] 打包:rollup -c --environment COMMIT:650f5c2,NODE_ENV:production,TARGET:compiler-ssr,SOURCE_MAP:true

看到這里,我們得知原來參數(shù) --sourcemap 或者 -s 控制的是 rollupSOURCE_MAP:true 參數(shù),從而控制是否生成 sourcemap 文件。

6. 總結(jié)

行文至此,我們來總結(jié)下。

看開源項目一定要先看官方的 README.md 和貢獻指南 contributing.md。

這是開源項目維護者為廣大想?yún)⑴c貢獻的開發(fā)者寫的。

我們通過學會了安裝 vitest vscode 擴展[17]、vitest-runner vscode 擴展 github[18],根據(jù)測試用例,指定相應(yīng)的測試用例調(diào)試相應(yīng)的源碼。

測試用例非常重要。而且 vitest[19] 是中文文檔,相對容易學習,非常值得我們學習。

另外,我們學會了如何生成 sourcemap,通過項目提供的例子,調(diào)試 Vue3 的源碼。同時,還探究了為何能夠編譯時傳參就能控制是否編譯生成 sourcemap 文件,本質(zhì)是利用命令行參數(shù),最終控制 rollup 打包工具的 SOURCE_MAP:true 參數(shù)。

這篇文章整體比較簡單,主要在于是否知道這兩種調(diào)試源碼的方式。如果把看源碼比作登山,那么學會調(diào)試可以說是找到山的入口和爬山的方式。真正爬山,才是更難的時候。

如果看完有收獲,歡迎點贊、評論、分享支持。你的支持和肯定,是我寫作的動力。

參考資料

[1]

vue3 源碼: https://github.com/vuejs/core.git

[2]

contributing.md: https://github.com/vuejs/core/blob/main/.github/contributing.md

[3]

Node.js: https://nodejs.org

[4]

PNPM: https://pnpm.io

[5]

ni: https://github.com/antfu/ni

[6]

vitest vscode 擴展鏈接: https://marketplace.visualstudio.com/items?itemName=ZixuanChen.vitest-explorer

[7]

vitest vscode 擴展 github: https://github.com/vitest-dev/vscode

[8]

vitest-runner vscode 擴展鏈接: https://marketplace.visualstudio.com/items?itemName=kingwl.vscode-vitest-runner

[9]

vitest-runner vscode 擴展 github: https://github.com/kwai-explore/vscode-vitest-runner

[10]

Vitest: https://cn.vitest.dev/guide/

[11]

Jest: https://marketplace.visualstudio.com/items?itemName=Orta.vscode-jest

[12]

Jest Runner: https://marketplace.visualstudio.com/items?itemName=firsttris.vscode-jest-runner

[13]

貢獻指南的文檔 contributing.md: https://github.com/vuejs/core/blob/main/.github/contributing.md

[14]

minimist: https://github.com/minimistjs/minimist

[15]

execa: https://github.com/sindresorhus/execa

[16]

rollup: https://rollupjs.org/guide/en

[17]

vitest vscode 擴展: https://marketplace.visualstudio.com/items?itemName=ZixuanChen.vitest-explorer

[18]

vitest-runner vscode 擴展 github: https://github.com/kwai-explore/vscode-vitest-runner

[19]

vitest: https://cn.vitest.dev/guide/

調(diào)試vue3源碼,vue.js,vscode,前端,javascript,ecmascript

·················?若川簡介?·················

你好,我是若川,畢業(yè)于江西高?!,F(xiàn)在是一名前端開發(fā)“工程師”。寫有《學習源碼整體架構(gòu)系列》20余篇,在知乎、掘金收獲超百萬閱讀。
從2014年起,每年都會寫一篇年度總結(jié),已經(jīng)堅持寫了8年,點擊查看年度總結(jié)。
同時,持續(xù)組織了一年多源碼共讀活動,幫助5000+前端人學會看源碼。公眾號愿景:幫助5年內(nèi)前端人走向前列。

掃碼加我微信 lxchuan12、拉你進源碼共讀

今日話題

目前建有江西|湖南|湖北?籍 前端群,想進群的可以加我微信 lxchuan12?進群。分享、收藏、點贊、在看我的文章就是對我最大的支持~文章來源地址http://www.zghlxwxcb.cn/news/detail-760942.html

到了這里,關(guān)于你可能從未使用過的調(diào)試 Vue3 (開源項目) 源碼的方式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Vue3中使用tinymce全功能演示,包括開源功能

    Vue3中使用tinymce全功能演示,包括開源功能

    效果圖: 1、下載插件: 2、在node_modules文件夾中找到tinymce下的skins復制到項目public文件夾中 ????(可以先創(chuàng)建一個tinymce文件夾): ? 3、在tinymce官網(wǎng)中下載中文包,并放在剛剛創(chuàng)建的tinymce文件夾中 Language Packages | Trusted Rich Text Editor | TinyMCE? ?前往官網(wǎng) 點擊按鈕下載全部語

    2024年02月05日
    瀏覽(23)
  • 【vue3】使用vite構(gòu)建vue3項目

    【vue3】使用vite構(gòu)建vue3項目

    ==??博主:初映CY的前說(前端領(lǐng)域) ,??本文核心:使用vite構(gòu)建vue3項目 【前言】 當我們選擇了vue3作為我們項目的開發(fā),就更加的推薦使用vite來對我們的項目進行打包。很簡單——這也是開發(fā)vue的團隊開發(fā)的工具,因此支持性肯定比傳統(tǒng)的打包工具好,下面我們就來使用vi

    2024年02月06日
    瀏覽(30)
  • 這可能是中國最好的13個開源項目

    這可能是中國最好的13個開源項目

    好的開源項目對體驗工具功能、加快開發(fā)速度、學習實現(xiàn)邏輯都能提供極大的便利。 然而,近些年開源項目數(shù)量暴漲、質(zhì)量難以避免地有些良莠不齊。如何辨別高質(zhì)量的開源項目呢? 隸屬工信部中國電子技術(shù)標準化研究院的中國開源云聯(lián)盟(COSCL)評出了2022年度13款優(yōu)秀開源

    2024年02月05日
    瀏覽(13)
  • 開源django+mysql+vue3前后端分離商城baykeShop使用指南

    開源django+mysql+vue3前后端分離商城baykeShop使用指南

    baykeShop(拜客商城系統(tǒng))是一款全開源Python棧商城系統(tǒng),后端依托django強大的框架體系,本項目融合了django的傳統(tǒng)模版體系,同時輕微結(jié)合了前后端分離的開發(fā)方式,在不同場景選擇了不同的技術(shù)棧,使其更具學習和研究價值,并且很好的打包為一個Python包文件,使其二次開

    2024年02月11日
    瀏覽(70)
  • Vue3項目中使用TypeScript

    Vue3項目中使用TypeScript

    在單文件組件中使用 TypeScript,需要在 小結(jié): 注意 當 script 中使用了 ts ,模板 template 在綁定表達式時也支持ts。 如果在表達式中不指名類型時,編譯器會報警告提示。 正確寫法 表達式指定類型 基于運行時聲明 當使用 基于類型聲明 通過泛型來定義 Props 語法規(guī)定 傳遞給

    2023年04月20日
    瀏覽(35)
  • jsx (vue3項目中使用)

    一、什么是jsx 在 JavaScript 里面寫 HTML 的語法,就叫做 JSX,算是對 JavaScript 語法的一個擴展. (在vue3項目中相當于單文件組件,.vue)使用的是jsx語法 二、jsx語法 1.插值。與 vue 模板語法中的插值一樣,但是雙大括號 {{}} 變?yōu)榱藛未罄ㄌ?{}。大括號內(nèi)支持任何有效的 JavaScript 表

    2024年01月17日
    瀏覽(24)
  • vue3項目中使用pinia

    vue3項目中使用pinia

    前言: 官網(wǎng)地址 https://pinia.vuejs.org/zh/ 中文文檔 https://pinia.web3doc.top/ pinia? ? 作為Vue.js 狀態(tài)管理庫 類型安全、可擴展性以及模塊化設(shè)計。 甚至讓你忘記正在使用的是一個狀態(tài)庫。 優(yōu)點: ? 優(yōu)點 dev-tools 支持 跟蹤動作、突變的時間線 Store 出現(xiàn)在使用它們的組件中 time travel

    2023年04月26日
    瀏覽(27)
  • 那些年我們用過的機械鍵盤【一把鍵盤,無限可能】

    那些年我們用過的機械鍵盤【一把鍵盤,無限可能】

    ?寫在前面:看標題就知道這是一期安利的文章,是來自博主的親身體驗,鍵盤對于程序員的意義,就像是你的左膀右臂,文章將 從K1~K8,Q1測評 ,希望能為你排憂解難! ?博客主頁: 努力的小鳴人 ?下面我們直接進入正題! Keychron是一個網(wǎng)紅機械鍵盤,可以同時兼容多款操

    2024年01月17日
    瀏覽(23)
  • Vue3.2 + TypeScript + Pinia + Vite4 + Element-Plus + 微前端(qiankun) 后臺管理系統(tǒng)模板(已開源---顯示項目頁面截圖)

    Vue3.2 + TypeScript + Pinia + Vite4 + Element-Plus + 微前端(qiankun) 后臺管理系統(tǒng)模板(已開源---顯示項目頁面截圖)

    Wocwin-Admin,是基于 Vue3.2、TypeScript、Vite、Pinia、Element-Plus、Qiankun(微前端) 開源的一套后臺管理模板;同時集成了微前端 qiankun也可以當做一個子應(yīng)用。項目中組件頁面使用了Element-plus 二次封裝 t-ui-plus 組件,目前已新增fastmock接口。 Link:https://wocwin.github.io/wocwin-admin/ 賬號:

    2024年02月08日
    瀏覽(40)
  • 02_使用Vite搭建Vue3項目

    02_使用Vite搭建Vue3項目

    首先插件添加:Live Server、Vue - Official、Vue VSCode Snippets、別名路徑跳轉(zhuǎn) 官網(wǎng):Vite | 下一代的前端工具鏈 (vitejs.dev) 1.創(chuàng)建一個文件夾VueApp,運行cmd轉(zhuǎn)到該目錄下,執(zhí)行命令:npm create vite@latest 2.然后轉(zhuǎn)到vuedemo目錄下命令:cd vuedemo, 3.執(zhí)行命令:npm install。文件夾內(nèi)會新添加no

    2024年04月08日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包