跳到主要内容
预计阅读 23 分钟

开源篇 | 贡献方式

前言

“你有参与过开源项目吗?”

这个问题在面试中出现的频率越来越高,尤其是在中高级岗位的面试中。很多候选人一听到这个问题就心虚——觉得自己没给 React 提过 PR、没写过知名开源库,好像就跟”开源”沾不上边。

但事实是,开源贡献远不止写代码这一种方式,而且参与开源的门槛比你想象的低得多

参与开源能给你带来什么?

  • 真实的协作经验——和全球开发者一起工作,接触生产级代码
  • 技术深度的提升——阅读优秀项目的源码,学习最佳实践
  • 个人影响力的积累——你的贡献记录是公开的、可验证的
  • 面试中的加分项——面试官能直接看到你的代码质量和协作能力

今天我们来聊聊,怎么从零开始参与开源,以及怎么在面试中把开源经历讲出彩。

诊断自测

在开始之前,做个自测:

1. 你知道从发现一个 bug 到提交 PR 被合并的完整流程吗?

2. 除了写代码,你还能说出哪些开源贡献方式?

点击查看答案

第1题: 完整流程是:Fork 仓库 -> Clone 到本地 -> 创建分支 -> 修改代码 -> 提交 Commit -> Push 到你的 Fork -> 创建 Pull Request -> 等待 Code Review -> 根据反馈修改 -> 最终合并。在这之前,通常还需要先在 Issue 中讨论,确认维护者愿意接受这个改动。

第2题: 开源贡献方式非常多元:修复文档中的错别字或补充说明、翻译文档、回答 Issue 中的问题、编写测试用例、优化 CI/CD 配置、改进错误提示信息、参与 RFC 讨论、写使用教程或博客文章等等。这些都是被社区认可的贡献方式。

从 Issue 到 PR:完整的贡献流程

很多人不敢参与开源,不是因为技术不行,而是不知道流程。其实整个流程并不复杂,我们来一步一步走一遍。

第一步:找到一个 Issue

大多数开源项目用 Issue 来追踪 bug、功能请求和改进建议。你要做的第一件事就是去 Issue 列表里找到一个你能处理的问题。

小技巧: 很多项目会给 Issue 打标签,比如 good first issuehelp wantedbeginner-friendly。这些就是专门留给新贡献者的入门任务,通常难度不大,维护者也会更耐心地指导你。

第二步:在 Issue 下留言表达意向

找到感兴趣的 Issue 后,不要直接开始写代码。先在 Issue 下面留言,说明你想要处理这个问题,简单描述一下你的解决思路。

这一步很重要,原因有两个:

  1. 避免重复劳动——可能已经有人在做了
  2. 确认方向——维护者可能对解决方案有特定的期望

一条简单的留言就够了,比如:

“Hi, I’d like to work on this issue. My approach would be to… Is this direction acceptable?”

第三步:Fork 和 Clone

确认可以做之后,把项目 Fork 到你自己的 GitHub 账号下,然后 Clone 到本地。

# Fork 后 Clone 到本地
git clone https://github.com/你的用户名/项目名.git
cd 项目名

# 添加上游仓库,方便后续同步
git remote add upstream https://github.com/原作者/项目名.git

第四步:创建分支、修改、提交

从主分支创建一个新分支来做你的改动。分支名要有意义,比如 fix/typo-in-readme 或者 feat/add-dark-mode

git checkout -b fix/issue-123-button-style

# 做你的修改......

git add .
git commit -m "fix: resolve button alignment issue (#123)"
git push origin fix/issue-123-button-style

注意 Commit Message 的格式。 很多项目遵循 Conventional Commits 规范(feat:fix:docs: 等前缀)。提交前一定要看看项目的 CONTRIBUTING.md,了解他们对 Commit Message 和代码风格的要求。

第五步:创建 Pull Request

Push 完代码后,去 GitHub 上创建 PR。PR 的描述是重中之重,一个好的 PR 描述应该包含:

  • 改了什么: 用一两句话说明你做了哪些改动
  • 为什么改: 关联对应的 Issue(比如 Closes #123
  • 怎么验证: 测试方法或截图
  • 其他说明: 是否有 Breaking Change、是否需要更新文档等

第六步:Code Review 和迭代

PR 提交后,维护者会进行 Code Review。被要求修改是非常正常的,不要觉得受挫。 即使是经验丰富的开发者,PR 被要求修改也是家常便饭。

收到反馈后,在同一个分支上继续修改、提交、Push,PR 会自动更新。

不同层次的贡献方式

开源贡献不只是写代码。根据难度和投入程度,大致可以分为以下几个层次。

第一层:文档贡献(入门级)

这是最容易上手的贡献方式,也是最被低估的。

  • 修复错别字、语法错误——看到文档里有 typo,直接提个 PR
  • 补充或改进文档说明——某个 API 的文档不清楚,你补充一下使用示例
  • 翻译文档——很多国际项目需要中文翻译
  • 完善 README——补充安装步骤、使用示例、常见问题

别小看文档贡献。好的文档直接影响一个项目的用户体验和采用率,维护者非常感激愿意改文档的人。而且文档贡献可以帮你熟悉项目的结构和贡献流程,为后续提交代码打基础。

第二层:Bug Fix(进阶级)

修 bug 是代码贡献中最常见的形式。

  • 复现并报告 bug——写一个清晰的 bug report 本身就是贡献
  • 修复已确认的 bug——从 good first issue 标签开始找
  • 编写测试用例——给现有代码补充测试,提升覆盖率

修 bug 需要你具备阅读和理解他人代码的能力。这个过程本身就是很好的学习——你能看到成熟项目是怎么组织代码、怎么处理边界情况的。

第三层:Feature 开发(高级)

给项目添加新功能是最有挑战性的贡献方式。

  • 实现 Issue 中被讨论认可的新功能
  • 参与 RFC(Request for Comments)讨论和设计
  • 重构或优化现有代码

Feature 开发通常需要你对项目有比较深入的理解。建议先从文档和 bug fix 做起,熟悉项目之后再尝试 feature 贡献。直接上来就提一个大的 feature PR,被拒绝的概率很高——因为维护者不了解你,也不确定你的设计是否符合项目的方向。

第四层:社区建设(综合)

当你在一个项目中积累了足够的贡献,你可能会参与到社区建设中:

  • 回答其他用户的 Issue 和讨论
  • 帮助 Review 其他贡献者的 PR
  • 维护项目的 CI/CD 和自动化流程
  • 成为项目的 Maintainer 或 Committer

这个层次的贡献需要长期投入,但回报也最大——你会成为这个项目社区的核心成员。

开源社区礼仪

开源社区有一些不成文但很重要的规矩。不遵守这些规矩,轻则 PR 被忽略,重则被拉黑。

尊重维护者的时间

维护者大多是用业余时间维护项目的。所以:

  • 提 Issue 前先搜索——你的问题可能已经被讨论过了
  • Issue 描述要清晰完整——提供复现步骤、环境信息、预期行为和实际行为
  • 不要催促——“Any update?” 这种催促信息会让维护者很反感。他们看到了自然会处理
  • 不要在 Issue 里灌水——“+1”、“我也遇到了” 这种留言用 Reaction(点赞)代替就好

遵循项目规范

每个项目都有自己的规范,提交代码前一定要看:

  • CONTRIBUTING.md——贡献指南,告诉你怎么提交代码
  • CODE_OF_CONDUCT.md——行为准则
  • PR 模板和 Issue 模板——按模板填写信息
  • 代码风格和 Lint 规则——确保你的代码通过了所有检查

保持沟通,及时反馈

  • PR 提交后如果收到 Review 意见,及时回复和修改
  • 如果你认领了一个 Issue 但后来没时间做了,主动说一声,让别人来接手
  • 对维护者的反馈保持开放心态,即使你不同意,也要礼貌地表达

用英语沟通

绝大多数国际开源项目的工作语言是英语。不需要多地道,能表达清楚就行。写 Issue 和 PR 描述时,简洁明了比华丽辞藻重要得多。

如何找到适合自己的贡献机会

“道理我都懂,但我不知道该去哪里找项目。“——这可能是很多人面临的问题。

从你日常使用的工具入手

你每天都在用的库和框架,就是最好的起点。因为你了解它的功能和行为,遇到问题时能更快定位。

比如你天天用 Vite,某天发现一个配置项的文档说明不够清楚,那就去提个改进文档的 PR。你不需要理解 Vite 的所有源码,只需要把文档写得更好就行。

善用 GitHub 的搜索功能

  • 搜索 good first issue 标签: 在 GitHub 搜索栏输入 label:"good first issue" language:TypeScript,就能找到大量适合新手的任务
  • GitHub Explore: github.com/explore 会推荐热门项目
  • goodfirstissue.dev / up-for-grabs.net: 这些网站专门收集适合新贡献者的 Issue

从小项目开始

不要一上来就瞄准 React、Vue 这种巨型项目。它们的代码库很庞大,Review 周期也很长。相反,一些中小型但活跃的项目往往更欢迎新贡献者,维护者的响应也更快。

一个好的目标项目应该满足:

  • 最近 3 个月有活跃的 Commit
  • Issue 和 PR 有人回复和处理
  • 有 CONTRIBUTING.md 文件
  • good first issue 标签的 Issue

自己创建开源项目

如果你在工作中造过一些有用的工具或库,也可以考虑开源出来。维护一个自己的开源项目虽然辛苦,但在面试中是非常有说服力的经历——它能体现你的技术能力、文档能力、项目管理能力和责任心。

常见误区

误区 1:觉得开源贡献必须是写核心代码

修文档、补测试、改 CI 配置、回答社区问题,这些都是实实在在的贡献。一个项目的成功不只靠核心代码,还靠文档、测试、社区运营等方方面面。面试的时候,你说”我给 XX 项目的文档补充了 10 个 API 的使用示例”,面试官不会觉得这不算贡献。

误区 2:不跟维护者沟通就直接提 PR

这是新手最常犯的错误。你花了一个周末写了一个大 feature,兴冲冲地提了 PR,结果维护者说”这个功能我们不打算加”或者”方案不是我们想要的”——白忙一场。提代码之前,先在 Issue 里沟通,确认方向和方案,能省掉大量无效劳动。

误区 3:一次提一个巨大的 PR

PR 越大,Review 起来越痛苦,被合并的概率越低。一个改了 50 个文件的 PR,维护者可能看都不想看。尽量把改动拆成小而聚焦的 PR——每个 PR 只做一件事,描述清楚,容易 Review,合并也快。

误区 4:PR 被拒就放弃

PR 被拒绝或者被要求大幅修改是很正常的。这不代表你水平不行,可能只是方案不符合项目的设计理念,或者时机不对。保持平常心,从反馈中学习,继续贡献。很多活跃的开源贡献者都是从被拒绝开始的。

小结

开源贡献是提升技术能力和个人影响力的绝佳途径,也是面试中非常有力的加分项。参与开源不需要你是大神,重要的是迈出第一步。

核心要点:

  1. 掌握从 Issue 到 PR 的完整流程,先沟通再动手
  2. 贡献方式是多层次的——文档、bug fix、feature、社区建设都算
  3. 遵守开源社区礼仪,尊重维护者的时间,保持沟通
  4. 从日常使用的工具和 good first issue 标签入手,找到适合自己的项目
  5. PR 要小而聚焦,被拒绝了不要放弃

本章思维导图

开源贡献方式
  • 完整流程
    • 找到 Issue
    • 留言表达意向
    • Fork & Clone
    • 创建分支 & 提交代码
    • 创建 Pull Request
    • Code Review & 迭代
  • 贡献层次
    • 文档贡献(入门级)
    • Bug Fix(进阶级)
    • Feature 开发(高级)
    • 社区建设(综合)
  • 社区礼仪
    • 尊重维护者时间
    • 遵循项目规范
    • 及时沟通反馈
    • 用英语沟通
  • 找到贡献机会
    • 从日常工具入手
    • 善用 GitHub 搜索
    • 从小项目开始
    • 自己创建开源项目
  • 常见误区
    • 只算核心代码
    • 不沟通就提 PR
    • PR 太大
    • 被拒就放弃

练习挑战

挑战一:基础(⭐)

去 GitHub 上找到一个你日常使用的前端工具或库,浏览它的 Issue 列表,找到一个带 good first issue 标签的 Issue。阅读这个 Issue 和相关的讨论,写出你的解决思路(不需要真的提交代码)。

参考思路

检查清单:

  • 你选择的项目最近 3 个月有活跃更新吗?
  • 你找到的 Issue 描述清楚吗?有没有人已经在做了?
  • 你看过项目的 CONTRIBUTING.md 了吗?
  • 你的解决思路是否考虑了边界情况?
  • 如果要真的提交,你知道该怎么写 Commit Message 吗?

参考项目: 可以去 Vite、Ant Design、Element Plus、Day.js 等项目的 Issue 列表里找找看。这些项目社区活跃,对新贡献者也比较友好。

挑战二:进阶(⭐⭐)

选择一个你熟悉的开源项目,找到它文档中一处可以改进的地方(比如说明不够清楚、缺少示例、有过时的内容),然后完成一次完整的贡献流程:Fork -> 修改 -> 提交 PR。

参考思路

文档改进的常见方向:

  1. 补充代码示例。 很多 API 文档只有参数说明,缺少实际使用的代码示例。你补充一个完整的、可运行的示例,就是很好的贡献。

  2. 修正过时的内容。 库升级后,文档可能没有同步更新。比如某个 API 改了参数,但文档还是旧的写法。

  3. 改善结构和表述。 有些文档技术上没错,但组织混乱或者表述不清。你用更清晰的方式重新组织一下,也是有价值的。

  4. 添加常见问题(FAQ)。 如果你看到 Issue 里同样的问题被反复提问,说明文档缺少这部分说明。你把这些常见问题整理到文档里,能帮到很多人。

PR 描述模板:

What: 补充了 XX API 的使用示例 Why: 原文档只有参数说明,缺少实际使用场景,新用户容易困惑(参考 Issue #XXX) How to verify: 查看渲染后的文档页面,确认示例代码可正常运行

挑战三:综合(⭐⭐⭐)

面试官问:“你有参与过开源项目吗?能详细聊聊吗?” 请准备一段 2 分钟左右的回答,即使你目前没有实际的开源经历,也要说出你的计划和理解。

参考思路

如果你有开源经历:

用 STAR 法则来组织回答:

  • Situation: “我平时在工作中经常使用 XX 库,在使用过程中发现了一个问题…”
  • Task: “我决定去社区看看有没有人遇到同样的问题,发现已经有相关的 Issue…”
  • Action: “我在 Issue 下留言表达了参与意向,然后 Fork 了仓库,花了两天时间定位和修复了这个问题。PR 提交后经过两轮 Review,最终被合并…”
  • Result: “这次贡献让我深入理解了 XX 库的内部实现,也学到了很多关于代码规范和协作流程的经验。之后我又陆续提交了几个 PR…”

如果你没有开源经历:

诚实地说,但展示你的认知和计划:

“目前我还没有正式的开源贡献经历,但我一直在关注几个开源项目。我理解开源贡献不只是写核心代码,文档改进、bug 报告、测试补充都是有价值的贡献方式。我计划从我日常使用的 XX 库开始,先从文档和 good first issue 入手,逐步深入参与。我已经 Fork 了这个项目并且在本地搭建好了开发环境,接下来会找机会提交我的第一个 PR。”

关键: 面试官考察的不只是你有没有做过,更看你对开源协作的理解和态度。即使没有经历,展示出正确的认知和行动计划也是加分的。

自我检测

读完本章后,确认你能做到以下几点:

  • 清楚从 Issue 到 PR 被合并的完整流程
  • 知道至少 4 种不同的开源贡献方式
  • 了解开源社区的基本礼仪和沟通规范
  • 能找到至少 3 个适合自己贡献的开源项目
  • 知道如何写一个清晰的 PR 描述
  • 提交代码前会先阅读 CONTRIBUTING.md
  • 遇到 PR 被拒绝的情况,知道如何应对
  • 面试中能清晰地讲述自己的开源经历或计划

购买课程解锁全部内容

大厂前端面试通关:71 篇构建完整知识体系

¥89.90