React Navigation contributor guide
想帮助改进React Navigation吗? 非常感谢您的帮助!
以下是对该项目作出贡献的一些方法:
以下是一些有助于入门的有用资源:
- Issue 模板
- PR 模板
- Forking the Repository
- Code Review Guidelines
- Run the Example App
- Run the Website
- Run Tests
请注意,我们在下面的示例中使用了Yarn,但是欢迎你使用 NPM。
Contributing
提 Bug
代码不可能没有bug, React Navigation 这种快速迭代的项目,出 bug 会更加频繁。 如果你觉得自己发现了一个 bug,你可以按照下面的步骤处理:
- 在现有的问题中搜索与你遇到的类似问题。 如果你找到了答案,请给个👍 请阅读评论,看看是否可以提供更有价值的信息。
- 如果没有找到,请创建一个新的 issue。 请务必遵循 issue 模板 。
创造高质量的再生产至关重要。 没有它,我们可能无法修复这个 bug,并且在理想的情况下,你会发现它实际上并不是库的 bug,而只是在你的项目中用错了。 即时修复 bug!
改进文档
任何成功的项目都需要高质量的文档,React Navigation 也不例外。
请阅读有关 react-navigation 的更多信息。
回答问题
对 React Navigation 做出贡献的另一个好方法是回答问题。 也许它是回答某人的问题,指出他们的代码中有小小的拼写错误,或者帮助他们拼装一个项目 如果你对 React Navigation 中更积极的角色感兴趣,请先回答问题 - 这不仅有助于您的工作,还可以展示你的编码功力!
修复 Bug
遇到 bug,修复她,坚持做你会有好运的(😂作为一个翻译,我也不知道这是什么鬼逻辑)。 就像之前提到的那样, 如果遇到 bug 请按如下操作:
- 检查该 bug 是不是已经有人提了 Pr 如果已经有了,review一下他的代码并留下你的 commit
- 如果还没有 PR,那么找出 bug,修复它! 如果相对较小,请继续解决问题并提一个 PR。 如果改动很大,请先提出问题,以便我们可以讨论它(请参阅 如何提大 Pr )
- 如果有与该 bug 有关的问题,请留下评论,并链接到您的 PR,以便其他人知道该 bug 已被解决。
查看 需要帮助 和 第一个 issue 标签,看看你可以帮忙干点儿啥!
建议一个功能
如果你想在 React Navigation 中添加一些新的功能, 请在 Canny 上发起一个创建新功能的请求。
提 PR
对于在项目中添加/删除/修改多个文件的任何更改(新功能或 bug 修复),请及时提 Pr(小步快跑,不要在一个 Pr 中修改太多文件)。 原因如下:
- 大 PR 需要花费大量时间进行检查,并且有时很难提取上下文
- 通常情况下,你可能不需要像预期的那样做出如此大的改变
考虑到这一点,这里有几个建议:
- 打开一个问题,并明确定义你想要完成什么以及你打算如何完成它
- 与社区成员和项目维护人员讨论 提供上下文,建立边界案例,并给出设计
- 制定一个行动计划
- 编码并提交 PR
- Review 这个 PR。 这可能需要一些时间,但如果你按照上述步骤操作,并不会花费太多时间。
我们想要这样做的原因是为了节省每个人的时间。 也许该功能已经存在,但没有相应的文档? 或者,它不适合该库。 无论如何,通过讨论重大改变,你可以节省时间。
界面变更 & 类型
如果你发现自己对项目的公共接口(API)进行了更改,那么你应该确保为 Flow 更新相应的库定义。 这些“libdefs”指定了我们的API类型,以便用户可以检查他们的代码。 高质量修改的示例是添加一个新的导航选项。
Libdef(位于flow/react-navigation.js
)需要更新,以便在examples/NavigationPlayground
文件夹中运行flow
没有错误。
- 按照 运行示例应用程序 部分中的说明准备
NavigationPlayground
示例并安装flow
插入示例的本地node_modules/.bin
文件夹中。 - 运行
flow
以检查当前的错误。 - 如果 API 的更改未导致错误,则表示我们没有在你的 API 更改的
NavigationPlayground
示例项目中使用任何覆盖范围。 这通常是这种情况 - 例如,如果你添加一个新的导航选项。 在这种情况下,你必须将新功能的示例用法添加到NavigationPlayground
中,以便测试 libdef 更改,以便我们可以永久性地正确测试和使用你的功能。 - 一旦看到错误,请继续执行并更新 libdef(位于
flow/react-navigation.js
),直到在examples/NavigationPlayground
中运行flow
不再有任何错误 。 - 新功能的 PR 中包含 libdef 更改。 请确保向维护人员标记您的 PR 有 libdef 更改,以便下一版本的库发布时,我们确保将更新的 libdef 上传到
flow-typed
repo。
信息
Issue 模板
在提交一个 issue 之前,请参考 issue 模板 ,并按照模版填写。 这是为了帮助每个人更好地理解你所遇到的问题,并减少来回获取必要的信息。
是的,完成问题模板需要时间和精力。 但这是提出能够得到回应的高质量问题的唯一方法。
你愿意花1分钟时间创建一份不完整的 issue 报告,然后等待几个月得不到任何回应; 还是愿意花20分钟时间填写一份高质量的问题报告和所有必要的内容,并在几天内得到答复? 对于愿意花时间审查你的问题的人来说,这也是一件值得尊敬的事情。
PR 模板
与 issue 模板非常相似, PR 模板 列出说明,以确保您的 PR 得到及时审查并减少反复。 确保在开始编码之前查看它。
Forking the Repository
- Fork
react-navigation
on GitHub - 在终端中运行这些命令,从而在本地下载并安装它们:
git clone https://github.com/<USERNAME>/react-navigation.git
cd react-navigation
git remote add upstream https://github.com/react-community/react-navigation.git
yarn install
Code Review 指南
到处看看, 匹配其余代码库的样式。 该项目使用ESLint来确保整个项目的一致性。 您可以通过运行下面的命令来检查项目:
yarn run eslint
如果发生任何错误,你必须手动修复它们,或者尝试通过运行yarn run format
来自动修复它们。
Run the Example App
NavigationPlayground 示例应用程序包含各种模式,并以简单方式使用 对于手动集成测试更改的贡献者。 See the README for instructions to run it.
运行网站
开发模式和热加载:
cd website
yarn install
yarn start
使用服务端渲染在生产模式下运行网站:
yarn run prod
如果你对docs
目录进行了任何更改,则需要在项目的根目录下运行yarn run build-docs
重新加载网站。
Run Tests
React Navigation 在 Jest 中实现了测试。 要从 React Navigation 目录运行,请运行以下任一命令(安装node_modules
之后)以运行测试或类型检查。
yarn run jest
这些命令将由我们的 CI 运行,并且必须在合并任何贡献之前通过。