你们好,我是 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 的博客
同步更新: