迈向开源第一步,给fabric.js提PR

大家好,我是CC,在这里欢迎大家的到来~

开场

今天这篇文章主要是想分享一下给 fabric.js 从提 issues 到后边合并 PR 的过程。之前在公司业务中有了一些对 fabric.js 源代码的阅读、调试以及修改,就想着看看能不能给开源做些贡献;在测试了 fabric.js 最新版本也没有修复问题的情况下就开始尝试提 issues。

提 issues

新开 issues 按照规范填写发现的 Bug 的相关内容(可以参考别人 issues 的书写),像发现 Bug 的版本、环境、复现步骤、期望的结果和实际的结果等,需如实填写。

后续仓库主理人就会在这个 issues 下进行沟通,在这里也可以表明你正在尝试修复此问题,主理人也会告诉后续合并到哪些分支。

阅读开源库的文档

在开发前需要先阅读代码库文档,了解如何规范提问,如何提交 issues,如何参与问题的修复等等。这一步的需要详细阅读。

像 fabric.js 的贡献流程文档,从内容中可以看到它详细罗列一步步的操作以及鼓励参与,真的非常友好了。

Fork 代码开发

开发前需要 Fork 一份代码到个人的仓库中,如果之前 Fork 过导致代码长时间未更新的话需要点击"Update branch"拉去最新代码。

接下来把代码克隆到本地,基于 master 新建分支(分支名称可以参考原仓库其他人的分支命名)。

跑通测试用例

测试用例之前也没写过,这里仓库主理人也给了一部分帮助和建议。

当时写了个 unit 测试用例,然后需要执行 package.json 中的测试脚本,确保测试用例通过后再提交。

javascript 复制代码
describe('measuring, splitting', () => {
  it('measuring a single char', () => {
    cache.clearFontCache();
    const text = new FabricText('');
    const style = text.getCompleteStyleDeclaration(0, 0);
    const measurement1 = text._measureChar('a', style, '', style);
    const measurement2 = text._measureChar('a', style, '', style);
    expect(measurement1).toEqual(measurement2);
    const cacheKeys = cache.charWidthsCache
      .get(text.fontFamily.toLowerCase())
      ?.get('normal_normal')
      ?.keys();
    expect(cacheKeys?.next().value).not.toBe('undefineda');

提 PR

把功能分支通过 Github 平台的 Pull requests 模块进行提交,从图中可以看到是从个人仓库的 Fork 仓库的功能分支合并到原仓库的 master 分支进行的提交合并。这里也注意填写标题和描述。

等待与回复

在仓库主理人阅读了 Pull requests 后会进行评审,看是否缺少测试用例以及提审代码是否符合规范等等。这里需要多耐心沟通,可能主理人和我们有着时差。

耐心等待

在有主理人 review 代码后只需要耐心等待,在下一次版本更像时就会被合并到 master 以及新版本。

总结

整个流程走下来,我最深的体会是:开源社区远比想象中更友好。刚开始提 issue 时难免忐忑,担心问题太简单或表达不清晰,但实际上,维护者往往非常耐心,甚至主动引导你如何修复。从阅读贡献规范、跑通测试,到接受代码审查,每一步都是宝贵的学习。

相关推荐
IT_陈寒36 分钟前
SpringBoot实战:3个隐藏技巧让你的应用性能飙升50%
前端·人工智能·后端
weixin1997010801639 分钟前
唯品会商品详情页前端性能优化实战
前端·性能优化
爱学习的程序媛1 小时前
【Web前端】Pinia状态管理详解
前端·vue.js·typescript
爱学习的程序媛1 小时前
“数字孪生”详解与前端技术栈
前端·人工智能·计算机视觉·智慧城市·信息与通信
海石1 小时前
微信小程序开发02:原始人也能看懂的着色器与视频处理
前端·微信小程序·视频编码
程序员Sunday1 小时前
Claude Code 生态爆发:5个必知的新工具
前端·人工智能·后端
ChoSeitaku1 小时前
NO.2|proto3语法|消息类型|通讯录|文件读取|enum类型
java·服务器·前端
小J听不清1 小时前
CSS 边框(border)全解析:样式 / 宽度 / 颜色 / 方向取值
前端·javascript·css·html·css3
用户255778850811 小时前
axios全局重复请求取消
前端
前端付豪1 小时前
实现一个用户可以有多个会话
前端·后端·llm