你們好,我是 Rustin。今天想跟你們介紹下如何快速的成爲 antd 的貢獻者,但願可以對想要加入 antd 社區貢獻的同窗有幫助!html
此博客在 GitHub 上公開發布. 若是您有任何問題或疑問,請在此處打開一個 issue。react
其實 antd 幾乎不須要作任何的介紹,你們都知道它是中國甚至世界都煊赫一時的 UI 設計框架。他們的口號是:企業級產品設計體系,創造高效愉悅的工做體驗。git
我對這個框架感情頗深,從大二開始接觸到這個框架至今已經陪我走過了 3 個年頭,在校和實習期間用它愉悅的完成了數不清的做業和任務。去年在畢業設計期間,終於爲它貢獻了第一份力量。github
最近我還在爲它持續貢獻力量,因此萌生了寫一篇有關如何給 antd 貢獻的文章的念頭。言歸正傳,下面我會用我前兩天幫 antd 修復一個 Bug 的例子來帶你們熟悉一下在 antd 社區貢獻的簡單流程。segmentfault
在我開始介紹個人例子以前,我以爲若是你剛開始嘗試在 Github 的社區開始貢獻,建議你讀一下 Github 官方的文檔。後端
官方的文檔介紹了一些很基礎可是很重要的關於 PR 的規則,當你熟悉如何在 Github 建立一個 PR 以後,你還應該在 antd 的 README 中找到貢獻指南,README 是每一個開源項目很重要的入口,
你基本上在 README 中能夠找到全部與該庫相關的連接。api
對於 antd 來講,他們把本身貢獻指南掛在本身的官網當中,既有中文版也有英文版。你可按照本身的狀況仔細閱讀完貢獻指南。
我以爲目前咱們能夠從貢獻指南獲取的要點信息是:跨域
開發準則antd
分支管理app
提交 Bug 報告
基本上咱們獲得這些要素信息以後,咱們就能夠開始嘗試去給社區作一些簡單的貢獻,下面我就經過一個例子給你們演示下一個 PR 的合併過程。
咱們的 PR 通常都是去修復 Bug 或者去添加一個新的功能,當咱們剛開始參與一個開源項目的時候,咱們能夠從 Good First Issue 開始,大多數的開源項目都會給一些簡單的問題加上 good first issue
的標籤,
antd 就有這樣被標記的問題,可是通常的活躍社區這樣的問題都比較搶手,
可能問題剛發出來就被別人領取以後開始修復了,可是除了這些問題以外,在 antd 還有一類問題我以爲難度適中,能夠做爲一些入門的問題來嘗試。
在 antd 的 issue 中,有一類問題被 help wanted
的標籤標記,這些問題大多都是一些用戶提的需求或者簡單的 Bug,咱們能夠從這些問題入手,好比我上週六在 issue 列表中,發現了這個 help wanted 的問題。
我看到這個問題的時候,報告人已經作了一些研究,彷佛是 referer HTTP 頭信息形成的。通常在開源社區中,若是你想修復這個問題,你就能夠在下方留言本身已經在嘗試修復這個問題或者 @ 社區協做者
詢問看你能不能嘗試修復這個問題。由於我沒看到別人的留言,我就開始了一些嘗試去修復這個問題。
首先,我沒有在本身的網站或者公司的網站中使用過 codesandbox,因此集成 codesandbox 對我來講是個陌生的事情。
可是可以發現問題報告人彷佛已經作出了研究,那我能不能順着提問者的思路去解決這個問題呢?
關於 referer 你能夠查閱它的一些標準,你會發現它還有個歷史遺留問題。referer 其實是 "referrer" 誤拼寫。
看完以後我還看到了阮一峯老師的博客,可是實際上文章中有點小錯誤,我已經留言了,可能阮一峯老師還沒來得及看。
關於 referer 的相關信息我就再也不贅述,能夠查看上面的連接文章。當時我想能不能就簡單暴力的設置 <meta name="referrer" content="no-referrer">
來解決呢?它表示咱們對於任何請求都不帶 referrer 信息。我在本地測試發現確實有效。
由於我以爲也許這個功能對於 antd 來講自己沒有什麼影響,因此我就提交了這份代碼。
在 antd 中提交 PR,跟提交問題報告同樣也須要遵循一份 PR 的提交模板,這份模板是放在 .github 目錄下的,
它也有中文版,因此我就再也不描述裏面的內容,由於我以爲仍是比較清晰的。
個人 PR 是修復 Bug,因此根據咱們從貢獻指南中獲取到的信息來講,咱們應該建立一個 PR 到 master 分支並填好 PR 的相關信息:
到這裏,彷佛大功告成,坐等 PR 被合併了(我在 PR 的信息中使用了 Github 關聯 PR 和 issue 的功能 "Fixes #22636",查看用法)。
可是實際上沒有那麼順利,通常咱們在提交 PR 以後,大機率會收到社區協做者的 code review,在 antd 中,會有🤖來幫你分配 reviewer。個人 PR 被 afc163 大神 review 了,收到了以下的評論:
在和 afc163 交流以後,咱們肯定須要只對 codesandbox 作特殊的處理,因此我就開始了一次新的嘗試。
首先,從思路上來講,目前想要作這種特殊的處理,咱們只能對使用特殊的標籤來處理這種狀況,具體支持單獨設置 referer 的標籤能夠查閱這個文檔。
同時我還去查閱了 codesandbox 的官方文檔,我發現他們提供的定義接口其實不光支持 post 請求,同時還支持 get 請求:
那我馬上有了思路,我能夠直接使用 <a>
標籤來發送 get 請求解決這個問題,我馬上修改代碼發送了 get 請求而且設置了 referer 規則:
<form> <Tooltip title={<FormattedMessage id="app.demo.codesandbox" />}> {/* FIXME: This temporarily solution to fix issues/22636, we need revert it to use form after the codesandbox api issue fixed. */} <a aria-label="Create New Sandbox with Prefilled Data" // {/* 這個屬性詳見 https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA*/} rel="noopener noreferrer" // {/* 設置不帶 referrer 信息 */} target="_blank" href={`https://codesandbox.io/api/v1/sandboxes/define?parameters=${compress( JSON.stringify(codesanboxPrefillConfig), )}`} {/* 生成參數 */} className="code-box-codesandbox" onClick={() => this.track({ type: 'codesandbox', demo: meta.id })} /> </Tooltip> </form>
我提交這段代碼,而後順利的經過了 afc163 的 review,而後代碼就能夠順利的合進了 master 分支了,咱們關聯的問題 Github 也會自動的關閉。
可是這樣確實就真的解決問題了嗎?可是我到這一步仍是沒能找到問題所在,爲何會像問題裏面說的忽然這幾天就出問題呢?
我好奇的是爲何這個東西會忽然出問題呢?而後我就去翻了 master 分支的提交記錄,發現並無最近的跟它相關的提交修改記錄,因此我就去了 codesandbox 官方文檔又看了看,而後找到了一個他們官方的 demo。
我發現他們的 demo 也是須要重定向的,因此我以爲這應該不是 antd 的修改形成的問題。而後我又在官網上發現了他們的 codesandbox-client 開源倉庫。
找到三方依賴的倉庫,咱們就能夠提交一個 issue 去讓他們幫忙查查看,另外也能夠看看別人有沒有這個問題,因此我建立了這個 issue 來繼續跟蹤這個問題。
終於在三天以後,我收到了該社區的回覆,咱們發現其餘人也有和 antd 相似的問題。該社區的協做者迅速的修復了這個問題。
他們解釋說這是他們最近後端的一個跨域修改形成的,可是沒有說明具體的細節,而後迅速的解決了這個問題。
當 codesandbox 的問題修復以後,我也按照上面的流程再次發起了一個 PR 去回滾了個人代碼,由於能夠看到我在上面的代碼中加入了一個 FIXME,個人那種修改只是一種暫時的解決方案,由於個人修改方案會與其餘幾個三方的連接模式不一致,
因此我在這個 PR 中回滾了代碼。
到此爲止,咱們就真正意義上的解決了這個問題,咱們也完整的走完了一個給 antd 貢獻的流程。但願個人這篇記錄能對你嘗試在 antd 社區貢獻有幫助!
此外我還在 antd 開了個跟骨架屏相關的坑,歡迎你們來 antd 一塊兒填坑!
文章首發於: Rustin 的博客
同步更新: