How to Contribute

How to Contribute

React Native是Facebook的第一个开源项目之一,它既处于非常活跃的发展阶段,也被用于使用Facebook的移动应用向每个人发布代码。如果您有兴趣为React Native做出贡献,希望这份文档能够为流程做出贡献。

行为守则

Facebook已经采纳了我们期望项目参与者遵守的行为准则。请阅读全文,以便您了解哪些行为将会被允许或不会被容忍。

参与其中

有很多方法可以为React Native做出贡献,其中许多方法不涉及编写任何代码。以下是一些开始的想法:

  • 只需开始使用React Native。阅读入门指南。一切正常吗?如果不是,我们一直在寻求改进。通过开放问题让我们知道。

  • 如果您发现需要解决的问题,请打开拉取请求。标签为Good First Task的问题是开始使用的好地方。

  • 阅读React Native文档。如果您发现任何令人困惑或可以改进的内容,可以点击大多数文档底部的“改进此页面”进行修改。

  • 浏览堆栈溢出并回答问题。这将有助于您熟悉常见的陷阱或误解,在对文档进行更新时可能会有所帮助。

  • 查看社区中其他人请求功能,并考虑在您看到要处理的内容时打开拉取请求

贡献是非常受欢迎的。如果您认为您需要帮助规划您的贡献,请跳入#react-native并让人们知道您正在寻找导师。

React Native的核心贡献者每月会面,并在React Native博客上发布会议记录。您还可以在React Native核心撰稿人 Facebook小组中找到专题讨论。

分类问题和拉取请求

您可以在不编写任何代码的情况下为项目做出贡献的一个好方法是帮助分类问题并在请求进入时提出请求。

  • 如果问题没有提供模板所需的所有详细信息,请询问更多信息。

  • 建议可以帮助分类问题的标签

  • 标记陈旧或应该关闭的问题。

  • 要求测试计划和审查代码。

您可以在维护人员指南中了解有关处理问题的更多信息。

我们的发展过程

一些核心团队将直接在GitHub上工作。这些变化将从一开始就公开。其他变更集将通过与Facebook的内部源代码管理桥梁。这是必要条件,因为它允许核心团队以外的Facebook工程师快速移动并从他们感觉舒适的环境中做出贡献。

当在GitHub上做出的更改被批准后,它将首先导入到Facebook的内部源代码管理中。一旦它通过了所有内部测试,这个改变最终会作为一次提交同步回GitHub。

分支机构

我们会尽全力保持master良好状态,并随时通过测试。但为了快速移动,我们将对应用程序可能不兼容的API进行更改。我们将尽我们所能来适当沟通这些更改和版本,以便在需要时锁定到特定版本。

要查看将要发生的更改并向React Native贡献者提供更好的反馈,请尽可能使用最新版本的候选版本。发布候选版本发布时,其中包含的更改将在生产Facebook应用中发布超过两周。

错误

我们使用GitHub问题来解决公共bug。如果您想报告问题,请环顾四周,看看是否有人已经解决了问题。如果你确定这是一个新的未报告的错误,你可以提交一个错误报告

如果您对使用React Native有疑问,社区页面列出了可帮助您开始使用的各种资源。

我们也有一个地方可以请求功能或增强功能。如果您看到任何您想实施的内容,请将其投票并解释您的使用案例。

报告新问题

当打开一个新的问题,始终确保填写的问题模板。这一步非常重要!不这样做可能会导致您的问题关闭。如果发生这种情况,请不要亲自采取这种做法,并在收集完模板所需的所有信息后随时开启新的问题。

  • 一个问题,一个错误:请报告每个问题的单个错误。

  • 提供snack:关注您的问题的最佳方式是提供简化的测试用例。你可以使用Snack来证明这个问题。

  • 提供再现步骤:列出重现问题所需的所有步骤。提供一个小吃或上传一个示例项目到GitHub。阅读您的错误报告的人应该能够按照这些步骤以最小的努力重现您的问题。

  • 试用最新版本:通过更新您的项目以使用React Native,master验证问题是否可以在本地复制。该错误可能已经修复!

我们无法通过GitHub问题提供支持。如果您在寻求代码方面的帮助,可考虑询问Stack Overflow或通过其他渠道与社区联系。

安全漏洞

Facebook 为安全漏洞的安全披露提供了一个赏金计划。考虑到这一点,请不要公开问题; 通过该页面上概述的过程。

拉请求

您的第一个拉动请求

所以你已经决定通过打开一个pull请求把代码提交回上游。您投入了大量时间,我们对此表示赞赏。我们会尽最大努力与您合作,让公关看着。

处理你的第一个请求?你可以从这个免费的视频系列学习如何:

如何在GitHub上贡献开源项目

我们列出了一系列初学者友好的问题,以帮助您深入了解React Native代码库并熟悉我们的贡献流程。这是一个开始的好地方。

提出改变

如果您想申请一项新功能或增强功能,但尚未考虑打开拉取请求,我们有一个地方可以跟踪功能请求

如果您打算更改公共API或对实施进行任何不重要的更改,我们建议您提交[Proposal]标题中包含的问题。这让我们在您投入大量精力之前就您的提案达成一致。这些类型的问题应该很少。如果您已经为该项目贡献了足够的时间,那么您可能已经可以访问React Native核心撰稿人 Facebook组,通常会进行这种讨论。

如果您只修正了一个错误,那么可以立即提交拉请求,但我们仍然建议提交一个问题,详细说明您正在修复的问题。如果我们不接受该特定修复程序,但希望跟踪该问题,这很有帮助。

发送拉请求

小拉请求更容易审查,并且更有可能进行合并。确保PR只做一件事,否则请拆分它。

提交拉请求之前,请确保完成以下操作:

  • 分叉存储库并从中创建分支master

  • 将版权声明添加到您添加的任何新文件的顶部。

  • 在你的提交中描述你的测试计划

  • 确保Travis和Circle CI都通过测试

  • 确保你的代码lints(npm run lint)。

所有的拉取请求都应该在master分支上打开。

注意:不必继续点击Merge master to your branchPR页面。如果存在冲突或测试失败,您可能想要合并主控。在合并您的PR之前,Facebook-GitHub-Bot最终将所有提交压缩为单个提交。

测试计划

一个好的测试计划具有您运行的确切命令及其输出,并在拉取请求更改UI或更新网站时提供截图或视频。

  • 如果您添加了应该测试的代码,请添加测试!

  • 如果您更改了API,请更新文档。

  • 如果您已更新文档,请在本地验证网站并提交截图(如果适用)(请参阅网站/ README.md

什么是测试计划?了解更多。

持续集成测试

确保所有的测试都通过两个特拉维斯和圈CI。PR破坏测试不太可能被合并。详细了解如何在此处测试您的更改。

打破变化

在添加新的中断更改时,请在您的请求中使用此模板:

### New breaking change here * **Who does this affect**: * **How to migrate**: * **Why make this breaking change**: * **Severity (number of people affected x effort)**:

如果您的pull请求被合并,核心撰稿人将更新重大更改列表,然后用于填充发行说明。

版权声明的文件

将其复制并粘贴到新文件的顶部:

/** * Copyright (c) 2015-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */

如果您已添加新模块,请@providesModule <moduleName>在评论末尾添加一个。这将允许急速包管理器找到它。

贡献者许可协议(CLA)

为了接受你的拉取请求,我们需要你提交一个CLA。你只需要这样做一次,所以如果你已经为另一个Facebook开源项目做了这个,那么你很好。如果您第一次提交拉取请求,Facebook GitHub机器人将回复一个指向CLA表单的链接。你也可以在这里完成你的CLA

接下来发生什么?

核心团队将监控拉取请求。阅读对维护人员的期望,了解在您打开请求后可能发生的情况。

时尚指南

我们的linter将捕获您的代码中可能存在的大多数样式问题。您可以通过简单的运行来检查代码样式的状态npm run lint

但是,仍有一些棉绒无法拾取的款式。

代码约定

General

  • 最重要的是:环顾四周。匹配您在项目其余部分使用的样式。这包括格式化,在代码中命名事物,在文档中命名事物。

  • 添加尾随逗号,

  • 2个空格用于缩进(无选项卡)

  • "Attractive"

JavaScript

  • 使用分号;

  • 'use strict';

  • 倾向于'结束"

  • 不要使用的可选参数setTimeoutsetInterval

  • 80 character line length

JSX

  • 身高"超过'了字符串文字道具

  • 将开标签包装在多行时,每行放置一个prop

  • {} 的道具应该拥抱自己的价值(没有空间)

  • 将>开幕标签的关闭放在与最后一个道具相同的线上

  • 将/>自闭标签的结束放在自己的行上,并将它们与开口左对齐<

Objective-C

  • @property申报后的空间

  • 同一行上的每一个 括号if

  • - method@interface@implementation括号在下面的行上

  • 尽量保持80个字符左右的行长(有时候这是不可能的......)

  • *运算符使用变量名称(例如NSObject *variableName;

Java

  • 如果方法调用跨越多行关闭括号与最后一个参数位于同一行。

  • 如果一个方法头不适合一行,每个参数都会在一行中出现。

  • 100个字符行的长度

文档

  • 不要将行换行为80个字符 - 将编辑器配置为在编辑文档时进行软换行。

执照

通过贡献React Native,您同意您的贡献将根据其BSD许可证进行授权。