竟然被尤雨溪點贊了:我給Vue生態貢獻代碼的這一年

大家好,我是若川。最近組織了源碼共讀活動,感興趣的可以點此加我微信 ruochuan12?參與,每周大家一起學習200行左右的源碼,共同進步。同時極力推薦訂閱我寫的《學習源碼整體架構系列》?包含20余篇源碼文章。

這篇文章在知乎被尤雨溪點贊了。不過作者不是我(若川)。以下是正文:


前言

本文主要分享過去一年自己給Vue社區生態貢獻代碼的經歷。

希望自己的經歷能給予想嘗試/了解如何參與開源貢獻的朋友們幫助和參考。

團隊的力量

在開始介紹經歷之前,我想先跟大家聊聊我對開源貢獻的看法。

一個開源項目能火起來的原因可能有很多種,比如解決了某個痛點,提升了某種效率.

但是要活下來卻是一定離不開持續維護與迭代,持續不斷地為你的用戶、下游解決問題和痛點。舉個 🌰:

e53265779a13b97adad12d71005d52e1.png

假設我們開源了某個UI庫 (基于Vue2),獲得了很多用戶的喜愛. 而后,Vue2隨著發展發布了Vue3,但是我們因為種種原因 (忙著網戀、卷不動了、不愛了)沒有兼容Vue3,開始無法滿足一些用戶的需求,導致用戶流失,那其實這個庫離退休也不遠了(用過一些KPI產物的我們懂的都懂).

一個人的精力是有限的,一個項目要走的更遠需要很多優秀開源者的參與和貢獻。就拿Vite舉例吧,在有人還在調研它適不適合上生產的時候,其實它已經擁有了不錯的生態系統:?77866a43b575941a42912c445f24c639.png

Vite核心團隊成員patak寫了一篇關于Vite生態系統的介紹,其中也感謝了很多大佬的貢獻,所以說一個好的項目離不開大家的貢獻~

貢獻經歷

e8d7fe71bfdc421e83862cd9fe31e523.png

關于我的貢獻經歷我簡單總結為三個階段,貢獻的PR比較零散與瑣碎,所以每個階段我只挑選一個相對具備代表性的進行分享~

錯別字殺手 (Typo Killer)

故事要從那個炎熱的夏天說起,我在調研?vuejs/composition-api的時候在官方文檔中發現了文檔格式錯誤,眼里容不得沙子的我 "Fork -> Fixed -> PR " 三連,開啟了我尊貴的Vue Contributor (混PR)生涯。

610657c039538dcfea18184f199c52c9.png

為什么我把這個階段稱為"錯別字殺手"呢 ?
從上面這個PR我們可以看出,給開源項目貢獻代碼其實不難,甚至可以說很簡單.也正是因為這樣,我們很容易迷失,為了功利心去參與,"為了貢獻而貢獻".這很明顯是錯誤的,我們需要端正好心態。

就這樣,我開始了開源貢獻的第一步。

問題修復 (Issue Fixed)

大家都知道Vue3有一個script setup語法糖,經過幾個月的提案也終于在V3.2定稿,V3.2發布后我也在觀察它的穩定情況,是否能應用到生產.在觀察的過程中,我在issue中看到了一個Bug Report:?aea4594a0f2613eebcb47022f65583ad.png?這個Bug的意思是說defineProps語法生成了不正確的PropType.當時我就在想,是不是在編譯script setup語法的時候沒有正確處理導致的呢 ? 心里也冒出了一個想法:(確認問題并修復它),但是這時心里又有另一個小惡魔在說:(不行啊,你沒有熟讀精通Vue源碼 逃:) ). 一心想貢獻代碼 (混PR)的我當然不會放過這次機會了~

如何Debug ?

要確認問題之前我們必須要懂得如何debug代碼,不能純粹靠愛和意念發電,這里我分享下我的思路 (或許有更好的辦法),通過測試用例來調試:

  • 打開?Jest(Vue3單測工具)配置文件,將testMatch配置改成你要調試的對應文件

  • 注釋掉所有測試用例并編寫測試用例 (這里的用例就是上圖應用場景)

  • OK,現在你只要找到相關的代碼位置 (Vue3采用Mono Repo目錄結構,查找相關功能函數還是蠻容易的) 就能進行斷點或者打印調試了,并根據測試用例斷言驗證你的修復成果.

測試用例

給一些集成了自動化測試工具的項目提PR,必須帶上相應的測試用例:

  • 保證你的PR能被快速驗證

  • 提升代碼覆蓋率與代碼健壯性

0f3fbe8992ad1e709caab949895e045a.png

功能新增 (Feature Request)

大家都知道Vue3引入了Composition API,用于提升邏輯復用能力. 這里要提到的是vueuse,它提供了很多易用且應用場景高頻的hook,比如?useLocalStorage,useDebounce等.

我在做需求時,有一個滾動功能需要實現,我發現vueuse并沒有提供對應的hook,我認為這個功能是通用并且高頻的,如果能將它實現并集成到vueuse那就太酷了.于是我閱讀了貢獻指南,開始了我的useScroll實現:

1. 新建issue確認可行性

307ef3ed7efd9fc9902dd3e74731deee.png

2. 功能設計

c3f9c1198fec90977764f01136ebbdd5.png

3. 功能實現

不是本文重點,就不貼代碼了,有興趣的👇

4. 提交PR

83068a4e38fd913cf8814442fe43b0cb.png

使用反饋

看到自己實現的功能有人使用并提交PR補充特性,還是蠻開心的 😛

60f02eae315afe79ed650ecd968f4269.png

Project Activity

雖然沒啥含金量,還是發出來裝下~逃 :)?e74399c266e32249affd636a827cacb2.png

貢獻指北

在這里,我分享幾個給開源項目貢獻代碼的注意事項:

用英語交流

dda1d83d1bc4719c3cf3ab213c4842a4.png?有的人可能會有疑問,作者明明是中國人,為什么要用英語呢 ? 這里拿Vue舉例說說我的看法 :

  • 項目成員來自五湖四海,幫你解決問題的人可能看不懂中文. (畢竟英語是全球通用語言)

  • Vue在國內外都有一定的用戶體量,可能有歪果友仁和你遇到一樣的問題或對你的解決方案感興趣,用英語方便大家檢索issuePR.

有的大佬會說:"不行啊,我不會英語啊". 其實作者也是一名"翻譯選手",有道,谷歌,總有一款翻譯軟件適合你.(說實話,用久了你會發現你的英語在進步)

4c1d5e50bbcccaa8f8bb2b7635cf62b1.png?So, 在提issuePR甚至git commit msg時帶上你的english吧~

遵循官方規范

正所謂"沒有規矩不成方圓",為了讓官方可以更清晰、迅速、準確地定位、復現、解決你的問題,請 :

  • issue時遵循官方模版并準確描述信息.

  • issue時盡量提供最小可復現demo (mini repo),這里可以是CodeSandbox、Github鏈接等.

  • PR前先閱讀貢獻指南 (如果有的話).

  • 優雅的提交你的Git Commit Message,最簡單的辦法就是直接查看你要貢獻倉庫的Commit History,抄它 !

CI/CD流程

d8c27f0661bc6abc7217ab32895620d2.png?一般開源項目都有一套基于Github Action的CI/CD流程,用于校驗和規范貢獻者的代碼格式和健壯性等.比較常見的就是自動化lint和自動化測試集成.所以我們在提交PR之前最好先跑一遍這個流程確認沒問題,這個一般在package.json文件的scripts命令就能看到.

這里有個小技巧就是可以在你的commit message里加上?[skip ci],?[ci skip],?[no ci],?[skip actions],[actions skip]等關鍵詞跳過CI,這個常用于修復文檔及錯別字等.

bd4d5fd05f2b9653e0ac9c102df56ffc.png

收獲成長

成就感

當我們站在巨人的肩膀上使用開源庫高效為業務賦能的同時,能盡自己的一份力反哺社區,給到社區一些正反饋,自己也能收獲成就感.

技術成長

當我們嘗試修復issue和?PR被review的時候,其實在這個過程中我們也在鍛煉自己解決問題及編碼的能力.

結語

最后想在這里感謝一下大佬?Anthony Fu,一名非常厲害的全職開源者.感嘆你在保持多個項目的維護與貢獻時還能產出多個Awesome的項目.從你身上學習和受益了很多 !

關于開源貢獻自己也是一個新手,這篇文章的目的一方面是對自己在這塊的回顧與總結,另一個是希望能給想參與開源的伙伴一個參考.

生命不息,開源不止. 瑞思拜 !

f4ac8d75c0d21f40df767d4813076340.gif

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

你好,我是若川,畢業于江西高校。現在是一名前端開發“工程師”。寫有《學習源碼整體架構系列》20余篇,在知乎、掘金收獲超百萬閱讀。
從2014年起,每年都會寫一篇年度總結,已經寫了7篇,點擊查看年度總結。
同時,最近組織了源碼共讀活動,幫助3000+前端人學會看源碼。公眾號愿景:幫助5年內前端人走向前列。

ec4639f5dc1087cacb60ffbb9cc18c01.png

識別方二維碼加我微信、拉你進源碼共讀

今日話題

略。分享、收藏、點贊、在看我的文章就是對我最大的支持~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/275100.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/275100.shtml
英文地址,請注明出處:http://en.pswp.cn/news/275100.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java版電子商務spring cloud分布式微服務b2b2c社交電商(四)SpringBoot 整合JPA

b2b2c電子商務社交平臺源碼請加企鵝求求:一零三八七七四六二六。JPA全稱Java Persistence API.JPA通過JDK 5.0注解或XML描述對象-關系表的映射關系,并將運行期的實體對象持久化到數據庫中。JPA 的目標之一是制定一個可以由很多供應商實現的AP…

60款很酷的 jQuery 幻燈片演示和下載

jQuery 是一個非常優秀的 JavaScript 框架,使用簡單靈活,同時還有許多成熟的插件可供選擇,它可以幫助你在項目中加入漂亮的效果,其中之一就是幻燈片,一種在有限的網頁空間內展示系列項目時非常好的方法。今天這篇文章要…

流體式布局與響應式布局_將固定像素設計轉換為流體比例布局

流體式布局與響應式布局Responsive web design has been a prime necessity for every enterprise ever since Google announced that responsive, mobile-friendly websites will see a hike in their search engine rank in 2015.自Google宣布響應式,移動友好型網…

怎樣開發一個 Node.js 命令行工具包

大家好,我是若川。最近組織了源碼共讀活動,感興趣的可以點此加我微信 ruochuan12 參與,每周大家一起學習200行左右的源碼,共同進步。同時極力推薦訂閱我寫的《學習源碼整體架構系列》 包含20余篇源碼文章。源碼共讀活動很多都是讀…

redis完全攻略

安裝篇 聲明:以下環境均是在ubuntu下進行 wget http://redis.googlecode.com/files/redis-2.4.4.tar.gztar zxf redis-2.4.4.tar.gz 然后進入目錄后直接make就可以了、如果邇的系統是32位的那么執行 make 32bit 安裝完成后、執行一下make test看是否正常、如果出現“…

印刷報價系統源碼_皇家印刷術-設計系統案例研究

印刷報價系統源碼重點 (Top highlight)Typography. It’s complicated. With Product Design, it’s on every screen. Decisions for a type scale affect literally every aspect of a product. When you’re working with an existing product, defining typography can fee…

Python簡單試題3

1,水仙花數 水仙花數是指一個 3 位數,它的每個位上的數字的 3次冪之和等于它本身 (例如:1^3 5^3 3^3 153) 代碼如下: 方法一: for i in range(100,1000): # 進行for循環num ia num % 10 # …

React Hooks 完全使用指南

大家好,我是若川。最近組織了源碼共讀活動,感興趣的可以點此加我微信 ruochuan12 參與,每周大家一起學習200行左右的源碼,共同進步。同時極力推薦訂閱我寫的《學習源碼整體架構系列》 包含20余篇源碼文章。React HooksHook 是什么…

重新設計Videoland的登錄頁面— UX案例研究

In late October of 2019 me and our CRO lead Lucas, set up a project at Videoland to redesign our main landing page for prospect customers (if they already have a subscription, they will go to the actual streaming product).在2019年10月下旬,我和我…

【常見Web應用安全問題】---5、File Inclusion

Web應用程序的安全性問題依其存在的形勢劃分,種類繁多,這里不準備介紹所有的,只介紹常見的一些。 常見Web應用安全問題安全性問題的列表:   1、跨站腳本攻擊(CSS or XSS, Cross Site Scripting)   2、S…

全新的 Vue3 狀態管理工具:Pinia

大家好,我是若川。最近組織了源碼共讀活動,感興趣的可以點此加我微信 ruochuan12 參與,每周大家一起學習200行左右的源碼,共同進步。同時極力推薦訂閱我寫的《學習源碼整體架構系列》 包含20余篇源碼文章。Vue3 發布已經有一段時間…

JS中變量和函數的使用

一、變量的介紹 1、啥是變量? 變量的本質是一塊有名字的內存空間。變量由變量名和變量值構成。變量名指的是內存空間的別名,一般位于賦值運算符的左邊;而變量值指的是內存空間中的數據,一般位于賦值運算符的右邊。例如:var balanc…

Win32 API消息函數:GetMessagePos

Win32 API消息函數:GetMessagePos 函數功能:該函數返回表示屏幕坐標下光標位置的長整數值。此位置表示當上一消息由GetMessage取得時鼠標占用的點。 函數原型:DWORD GetMessagePos(VOID) 參數:無。 返回值&…

都快 2022 年了,這些 Github 使用技巧你都會了嗎?

大家好,我是若川。最近組織了源碼共讀活動,感興趣的可以點此加我微信 ruochuan12 參與,每周大家一起學習200行左右的源碼,共同進步。同時極力推薦訂閱我寫的《學習源碼整體架構系列》 包含20余篇源碼文章。最近經常有小伙伴問我如…

單線程+異步協程

一 . 線程池和進程池 可以適當的使用,在大量的IO情況下有更好的方法 import time from multiprocessing.dummy import Pool def request(url):print(正在下載->,url)time.sleep(2)print(下載完畢->,url) start time.time() urls [www.baidu.com,www.taobao.com,www.sou…

Repeater\DataList\GridView實現分頁,數據編輯與刪除

一、實現效果 1、GridView 2、DataList 3、Repeater 二、代碼 1、可以去Csdn資源下載,包含了Norwind中文示例數據庫噢!(放心下,不要資源分) 下載地址:數據控件示例源碼Norwind中文數據庫 2、我的開發環境&a…

網站快速成型_我的老板對快速成型有什么期望?

網站快速成型Some of the top excuses I have gotten from clients when inviting them into a prototyping session are: “I am not a designer!” “I can’t draw!” “I have no creative background!”在邀請客戶參加原型制作會議時,我從客戶那里得到的一些主…

碎片化學前端,融入到積極上進的環境,我推薦~

眾所周知,關注公眾號可以了解學習掌握技術方向,學習優質好文,落實到自己項目中。還可以結交圈內好友,讓自己融入到積極上進的技術氛圍,促進自己的技術提升。話不多說,推薦這些優質前端公眾號前端之神 80w閱…

重學JavaScript深入理解系列(六)

JavaScript深入理解—-閉包(Closures) 概要 本文將介紹一個在JavaScript經常會拿來討論的話題 —— 閉包(closure)。閉包其實已經是個老生常談的話題了; 有大量文章都介紹過閉包的內容,盡管如此,這里還是要試著從理論角…

EXT.NET復雜布局(四)——系統首頁設計(上)

很久沒有發帖了,很是慚愧,因此給各位使用EXT.NET的朋友獻上一份禮物。 本篇主要講述頁面設計與效果,下篇將講述編碼并提供源碼下載。 系統首頁設計往往是個難點,因為往往要考慮以下因素: 重要通知系統功能菜單快捷操作…