{"componentChunkName":"component---src-templates-docs-js","path":"/docs/how-to-contribute.html","result":{"data":{"markdownRemark":{"html":"<p>React — это один из первых проектов c открытым исходным кодом в компании Facebook, который очень активно развивается и в то же время используется для разработки <a href=\"https://www.facebook.com\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">facebook.com</a>. Мы стараемся сделать процесс открытой разработки как можно более простым и прозрачным, но нам ещё есть над чем поработать. Надеемся, что этот раздел прояснит многие вопросы, касающиеся участия в разработке React.</p>\n<h3 id=\"code-of-conduct\"><a href=\"#code-of-conduct\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><a href=\"https://github.com/facebook/react/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Правила поведения</a> </h3>\n<p>Компания Facebook приняла <a href=\"https://www.contributor-covenant.org/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">соглашение участника</a> в качестве своего кодекса поведения, поэтому мы ожидаем, что участники проекта будут его придерживаться. Пожалуйста, прочитайте <a href=\"https://github.com/facebook/react/blob/master/CODE_OF_CONDUCT.md\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">полный текст</a>, чтобы понимать, как правильно себя вести, а как поступать недопустимо. </p>\n<h3 id=\"open-development\"><a href=\"#open-development\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Открытая разработка </h3>\n<p>Разработка React ведётся на <a href=\"https://github.com/facebook/react\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">GitHub</a>. Пулреквесты участников команды React и добровольцев принимаются на общих правах.</p>\n<h3 id=\"semantic-versioning\"><a href=\"#semantic-versioning\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Семантическое версионирование </h3>\n<p>React использует <a href=\"https://semver.org/lang/ru/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">семантическое версионирование</a>. Мы выпускаем патчи в случае исправления критических багов, минорные версии с новыми возможностями или несущественными изменениями, а также мажорные версии, которые содержат изменения, ломающие обратную совместимость. При обратно несовместимых изменениях, мы отмечаем нерекомендуемую к использованию функциональность в минорной версии, чтобы пользователи могли заранее подготовиться к изменениям и правильно выполнить миграцию своих проектов. Подробнее узнать о нашем ответственном отношении к стабильности и инкрементальной миграции можно в <a href=\"/docs/faq-versioning.html\">нашем версионном соглашении</a>.</p>\n<p>Все важные изменения заносятся в файл <a href=\"https://github.com/facebook/react/blob/master/CHANGELOG.md\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">CHANGELOG.md</a>.</p>\n<h3 id=\"branch-organization\"><a href=\"#branch-organization\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Модель ветвления </h3>\n<p>Отправляйте все изменения прямиком в <a href=\"https://github.com/facebook/react/tree/master\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">ветку <code class=\"gatsby-code-text\">master</code></a>. Мы не используем раздельные ветки для разработки и предстоящих релизов. Мы стараемся сохранять ветку <code class=\"gatsby-code-text\">master</code> в хорошем состоянии, где успешно проходят все тесты.</p>\n<p>Код в ветке <code class=\"gatsby-code-text\">master</code> должен быть совместим с последней стабильной версией. Такой код может содержать дополнительную функциональность, которая не ломает обратную совместимость. Поэтому в любой момент мы можем выпустить новую минорную версию из ветки <code class=\"gatsby-code-text\">master</code>.</p>\n<h3 id=\"feature-flags\"><a href=\"#feature-flags\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Флаги возможностей </h3>\n<p>Для того, чтобы выпускать релизы из ветки <code class=\"gatsby-code-text\">master</code>, изменения, ломающие обратную совместимость, и экспериментальные возможности могут быть применены в зависимости от значений флагов возможностей.</p>\n<p>Флаги возможностей объявлены в <a href=\"https://github.com/facebook/react/blob/master/packages/shared/ReactFeatureFlags.js\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><code class=\"gatsby-code-text\">packages/shared/ReactFeatureFlags.js</code></a>. Разные сборки React могут включать различные наборы флагов возможностей; например, сборка React Native может быть конфигурироваться иначе, чем сборка React DOM. Такие флаги находятся в <a href=\"https://github.com/facebook/react/tree/master/packages/shared/forks\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><code class=\"gatsby-code-text\">packages/shared/forks</code></a>. Флаги возможностей имеют статическую типизацию, заданную с помощью Flow, поэтому запустив <code class=\"gatsby-code-text\">yarn flow</code>, можно убедиться, что все необходимые файлы были обновлены.</p>\n<p>Система сборки React перед выпуском новой версии удаляет ветви кода с отключённой функциональностью. Задачи непрерывной интеграции запускаются на каждый коммит, чтобы проверить изменения размера бандла. Это значение можно использовать как своего рода сигнал, что та или иная возможность была правильно обработана.</p>\n<h3 id=\"bugs\"><a href=\"#bugs\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Баги </h3>\n<h4 id=\"where-to-find-known-issues\"><a href=\"#where-to-find-known-issues\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Где находятся ишью? </h4>\n<p>Мы используем <a href=\"https://github.com/facebook/react/issues\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">ишью на GitHub</a> для отслеживания багов. Мы уделяем серьёзное внимание всем ишью и стараемся информировать пользователей о том, какие баги мы исправляем в данный момент.</p>\n<h4 id=\"reporting-new-issues\"><a href=\"#reporting-new-issues\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Как открыть новое ишью? </h4>\n<p>Для того чтобы было легче исправить баг, нужен пример кода. Поработать с таким примером и отловить баг можно в онлайн-песочнице, <a href=\"https://jsfiddle.net/Luktwrdm/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">например, в JSFiddle</a>.</p>\n<p>Прежде чем открыть новое ишью, пожалуйста, убедитесь нет ли уже открытых ишью по той же проблеме.</p>\n<h4 id=\"security-bugs\"><a href=\"#security-bugs\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Баги безопасности </h4>\n<p>У Facebook есть <a href=\"https://www.facebook.com/whitehat/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">программа Bug Bounty</a> для сообщения о багах безопасности. Пожалуйста, не публикуйте ишью о таких проблемах в открытом доступе. Если вы обнаружили дыру в безопасности React, зайдите на <a href=\"https://www.facebook.com/whitehat/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">эту страницу</a> и следуйте инструкциям.</p>\n<h3 id=\"how-to-get-in-touch\"><a href=\"#how-to-get-in-touch\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Наши контакты </h3>\n<ul>\n<li>IRC: <a href=\"https://webchat.freenode.net/?channels=reactjs\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">#reactjs на freenode</a></li>\n<li><a href=\"/community/support.html#popular-discussion-forums\">Дискуссионные форумы</a></li>\n</ul>\n<p>Кроме этого есть <a href=\"https://www.reactiflux.com/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">сообщество пользователей React на платформе чатов Discord</a>. Туда вы также можете обратиться за помощью.</p>\n<h3 id=\"proposing-a-change\"><a href=\"#proposing-a-change\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Предложения по улучшению </h3>\n<p>Если у вас есть предложения по улучшению React или вы хотите что-то изменить в реализации его функций, откройте <a href=\"https://github.com/facebook/react/issues/new\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">новое ишью</a>, чтобы обсудить с нами все нюансы прежде, чем вы начнёте работать.</p>\n<p>Если вы исправили баг, то можете сразу отправить пулреквест, но всё-таки мы рекомендуем создать ишью с подробным описанием ошибки, которую вы исправили. Даже если вдруг получится так, что ваш пулреквест будет отклонён, мы продолжим работу над этим багом.</p>\n<h3 id=\"your-first-pull-request\"><a href=\"#your-first-pull-request\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Ваш первый пулреквест </h3>\n<p>Уже приступили к работе над вашим первым пулреквестом? Посмотрите несколько видеороликов о том, <a href=\"https://egghead.io/series/how-to-contribute-to-an-open-source-project-on-github\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">как нужно работать с проектом на GitHub</a>.</p>\n<p>Чтобы облегчить вам первые шаги в освоении процесса разработки React, мы завели специальный тег <strong><a href=\"https://github.com/facebook/react/issues?q=is:open+is:issue+label:%22good+first+issue%22\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">good first issues</a></strong>, по которому можно получить список не очень сложных багов. Будет хорошо, если вы начнёте работу именно с этого списка.</p>\n<p>Если вы решили исправить какой-нибудь баг, пожалуйста, просмотрите комментарии к ишью и убедитесь, что ещё никто не приступил к работе над ним. Прежде чем начать работу, обязательно оставьте комментарий об этом, чтобы остальные участники не начали исправлять тот же самый баг.</p>\n<p>Если кто-то взял работу над ишью на себя, но ничего не сделал в течение двух недель, вы можете спокойно работать над этой проблемой, предварительно оставив соответствующий комментарий.</p>\n<h3 id=\"sending-a-pull-request\"><a href=\"#sending-a-pull-request\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Как отправлять пулреквесты? </h3>\n<p>За пулреквестами следит основная команда разработчиков. Мы обязательно рассмотрим ваш пулреквест, а затем сделаем мёрж или попросим что-то доработать в нём. В крайнем случае мы можем отклонить пулреквест с обязательным объяснением причины. Изменения в API вносятся не сразу, потому что нужно отследить и настроить внешние зависимости сайта Facebook.com. Мы делаем всё возможное для обеспечения хорошей обратной связи при выполнении изменений.</p>\n<p><strong>Перед тем как отправлять пулреквест,</strong> нужно выполнить следующие действия:</p>\n<ol>\n<li>Форкнуть <a href=\"https://github.com/facebook/react\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">репозиторий React</a> и создать собственную ветку от главной ветки <code class=\"gatsby-code-text\">master</code>.</li>\n<li>Запустить команду <code class=\"gatsby-code-text\">yarn</code> в корне репозитория.</li>\n<li>Если вы исправляете баг и добавляете код, который должен быть обязательно протестирован, не забудьте запустить тесты!</li>\n<li>Убедиться, что все тесты проходят нормально (<code class=\"gatsby-code-text\">yarn test</code>). Совет: команда <code class=\"gatsby-code-text\">yarn test --watch TestName</code> может оказаться очень полезной в процессе разработки.</li>\n<li>Протестировать рабочее окружение с помощью команды <code class=\"gatsby-code-text\">yarn test-prod</code>. Эта команда имеет такие же опции, что и <code class=\"gatsby-code-text\">yarn test</code>.</li>\n<li>Если вам нужно отладить код, запустите <code class=\"gatsby-code-text\">yarn debug-test --watch TestName</code>, откройте <code class=\"gatsby-code-text\">chrome://inspect</code> и нажмите «Inspect».</li>\n<li>Отформатировать код с помощью утилиты <a href=\"https://github.com/prettier/prettier\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">prettier</a> (<code class=\"gatsby-code-text\">yarn prettier</code>).</li>\n<li>Запустить линтер (<code class=\"gatsby-code-text\">yarn lint</code>). Совет: команда <code class=\"gatsby-code-text\">yarn linc</code> анализирует только изменённые файлы.</li>\n<li>Выполнить проверку типов с помощью <a href=\"https://flowtype.org/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Flow</a> (<code class=\"gatsby-code-text\">yarn flow</code>).</li>\n<li>Подписать соглашение добровольного разработчика (Contributor License Agreement).</li>\n</ol>\n<h3 id=\"contributor-license-agreement-cla\"><a href=\"#contributor-license-agreement-cla\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Соглашение добровольного разработчика (Contributor License Agreement, CLA) </h3>\n<p>Чтобы мы смогли принимать ваши пулреквесты, вам нужно подписать CLA. Его нужно подписать только один раз. Если вы ранее подписывали CLA для любого другого проекта с открытым исходным кодом в компании Facebook, то этого достаточно. Если вы отправляете пулреквест впервые, сообщите нам, что вы уже подписали CLA и мы сопоставим его с вашим ником на GitHub.</p>\n<p><strong><a href=\"https://code.facebook.com/cla\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Здесь вы можете прочитать и подписать CLA</a></strong></p>\n<h3 id=\"contribution-prerequisites\"><a href=\"#contribution-prerequisites\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Что нужно для разработки? </h3>\n<ul>\n<li>У вас на компьютере должны быть установлены <a href=\"https://nodejs.org\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Node.js</a> версии 8.0.0 или выше и <a href=\"https://yarnpkg.com/en/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Yarn</a> 1.2.0 или выше.</li>\n<li>У вас установлен <a href=\"https://www.oracle.com/technetwork/java/javase/downloads/index.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">JDK</a>.</li>\n<li>Некоторые зависимости React нужно компилировать. Для этого вам необходимо установить <code class=\"gatsby-code-text\">gcc</code>. Если у вас OS X, то Xcode Command Line Tools справятся с этой задачей. В Ubuntu команда <code class=\"gatsby-code-text\">apt-get install build-essential</code> установит все необходимые пакеты. В других Linux-дистрибутивах установка выполняется с помощью аналогичных команд. Для Windows последовательность действий описана в <a href=\"https://github.com/nodejs/node-gyp#installation\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">инструкции по установке <code class=\"gatsby-code-text\">node-gyp</code></a>.</li>\n<li>Знание git.</li>\n</ul>\n<h3 id=\"development-workflow\"><a href=\"#development-workflow\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Порядок сборки и тестирования React </h3>\n<p>После клонирования репозитория React, запустите <code class=\"gatsby-code-text\">yarn</code>, чтобы загрузить все необходимые зависимости.\nТеперь можно использовать следующие команды:</p>\n<ul>\n<li><code class=\"gatsby-code-text\">yarn lint</code> для проверки кода.</li>\n<li><code class=\"gatsby-code-text\">yarn linc</code> аналогична <code class=\"gatsby-code-text\">yarn lint</code>, но работает быстрее, так как проверяет только изменённые файлы в вашей текущей ветке.</li>\n<li><code class=\"gatsby-code-text\">yarn test</code> запускает тесты.</li>\n<li><code class=\"gatsby-code-text\">yarn test --watch</code> запускает тесты в интерактивном режиме с наблюдением за изменениями.</li>\n<li><code class=\"gatsby-code-text\">yarn test &lt;pattern&gt;</code> запускает тесты только для выбранных файлов.</li>\n<li><code class=\"gatsby-code-text\">yarn test-prod</code> тестирует рабочее окружение. Эта команда имеет такие же опции, как <code class=\"gatsby-code-text\">yarn test</code>.</li>\n<li><code class=\"gatsby-code-text\">yarn debug-test</code> аналогична <code class=\"gatsby-code-text\">yarn test</code>, но имеет возможность отладки. Откройте <code class=\"gatsby-code-text\">chrome://inspect</code> и нажмите «Inspect».</li>\n<li><code class=\"gatsby-code-text\">yarn flow</code> запускает <a href=\"https://flowtype.org/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Flow</a> для проверки типов.</li>\n<li><code class=\"gatsby-code-text\">yarn build</code> создаёт папку <code class=\"gatsby-code-text\">build</code>, в которую помещает готовые пакеты.</li>\n<li><code class=\"gatsby-code-text\">yarn build react/index,react-dom/index --type=UMD</code> создаёт UMD-сборки для React и ReactDOM.</li>\n</ul>\n<p>Мы рекомендуем выполнять тестирование ваших изменений с помощью команды <code class=\"gatsby-code-text\">yarn test</code> или её аналогов для того, чтобы убедиться, что они ничего не сломали.</p>\n<p>В некоторых случаях лучше выполнять тестирование сборки React на реальном проекте.</p>\n<p>Для этого, прежде всего, нужно запустить команду <code class=\"gatsby-code-text\">yarn build</code>. Эта команда компилирует и выгружает в папку <code class=\"gatsby-code-text\">build</code> готовую сборку, а также создаёт в папке <code class=\"gatsby-code-text\">build/packages</code> npm-пакеты.</p>\n<p>Если вы хотите попробовать свои изменения в существующем проекте на React, вы можете скопировать <code class=\"gatsby-code-text\">build/dist/react.development.js</code>, <code class=\"gatsby-code-text\">build/dist/react-dom.development.js</code>, или любые другие продукты сборки в вашем приложении и использовать их вместо стабильной версии.</p>\n<p>Если ваш проект использует React из npm, вы можете удалить <code class=\"gatsby-code-text\">react</code> и <code class=\"gatsby-code-text\">react-dom</code> в этой зависимости и использовать <code class=\"gatsby-code-text\">yarn lint</code>, чтобы направить их на локальную папку <code class=\"gatsby-code-text\">build</code>. Обратите внимание, что <strong>вместо <code class=\"gatsby-code-text\">--type=UMD</code> вы можете передать <code class=\"gatsby-code-text\">--type=NODE</code> при сборке</strong>. Вам также будет нужно собрать пакет <code class=\"gatsby-code-text\">scheduler</code>:</p>\n<div class=\"gatsby-highlight\" data-language=\"sh\"><pre class=\"gatsby-code-sh\"><code class=\"gatsby-code-sh\">cd ~/path_to_your_react_clone/\nyarn build react/index,react-dom/index,scheduler --type=NODE\n\ncd build/node_modules/react\nyarn link\ncd build/node_modules/react-dom\nyarn link\n\ncd ~/path/to/your/project\nyarn link react react-dom</code></pre></div>\n<p>После каждого запуска в корневой папке React команды <code class=\"gatsby-code-text\">yarn build</code> пакеты React будут обновляться в <code class=\"gatsby-code-text\">node_modules</code> вашего тестового проекта.</p>\n<p>Если какой-то пакет всё ещё пропущен (например, если <code class=\"gatsby-code-text\">react-dom/server</code> используется в проекте), вы можете всегда сделать полную сбоку через <code class=\"gatsby-code-text\">yarn build</code>. Заметьте, что запуск <code class=\"gatsby-code-text\">yarn build</code> без дополнительных параметров занимает много времени.</p>\n<p>Если ваш пулреквест содержит новую функциональность, он должен включать и соответствующие юнит-тесты. Это исключит поломку вашего кода при дальнейшей разработке.</p>\n<h3 id=\"style-guide\"><a href=\"#style-guide\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Правила оформления кода </h3>\n<p>Для автоматического форматирования кода мы используем <a href=\"https://prettier.io/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Prettier</a>.\nЗапускайте <code class=\"gatsby-code-text\">yarn prettier</code> после каждого редактирования кода.</p>\n<p>Линтер отлавливает большую часть проблем, которые есть в ваших программах.\nДля проверки состояния вашего кода запустите команду <code class=\"gatsby-code-text\">yarn linc</code>.</p>\n<p>Линтер не может выловить все проблемы в оформлении кода. Если вы в чём-то сомневаетесь, поищите ответ в <a href=\"https://github.com/airbnb/javascript\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Airbnb’s Style Guide</a>.</p>\n<h3 id=\"request-for-comments-rfc\"><a href=\"#request-for-comments-rfc\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Рабочее предложение (Request for Comments, RFC) </h3>\n<p>Большинство изменений, включая исправления багов и улучшение документации, обычно предлагаются и реализуются с помощью простых пулреквестов на GitHub.</p>\n<p>Но кроме них есть и «глобальные» изменения, которые требуют серьёзного обсуждения и продуманных архитектурных решений со стороны основной команды React.</p>\n<p>Рабочее предложение (Request for Comments, RFC) — это процесс, призванный определить сбалансированный и предсказуемый путь для реализации новых функций до того, как будет начата работа над ними. Для рабочих предложений предназначен <a href=\"https://github.com/reactjs/rfcs\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">rfc-репозиторий</a>.</p>\n<h3 id=\"license\"><a href=\"#license\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Лицензия </h3>\n<p>React распространяется под лицензией MIT. Поэтому работая над своими пулреквестами, вы соглашаетесь с тем, что ваш код будет иметь соответствующую лицензию.</p>\n<h3 id=\"what-next\"><a href=\"#what-next\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Что дальше? </h3>\n<p>В <a href=\"/docs/codebase-overview.html\">следующем разделе</a> описана кодовая база React.</p>","frontmatter":{"title":"Как внести свой вклад?","next":"codebase-overview.html","prev":null},"fields":{"path":"content/docs/how-to-contribute.md","slug":"docs/how-to-contribute.html"}}},"pageContext":{"slug":"docs/how-to-contribute.html"}},"staticQueryHashes":[]}