{"componentChunkName":"component---src-templates-docs-js","path":"/docs/faq-versioning.html","result":{"data":{"markdownRemark":{"html":"<p>React следует принципам <a href=\"https://semver.org/lang/ru/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">семантического версионирования (semver)</a>.</p>\n<p>Это значит, что для номера версии вида <strong>x.y.z</strong>:</p>\n<ul>\n<li>При выпуске <strong>исправлений ошибок</strong>, мы делаем <strong>патч-релиз</strong>, изменяя число <strong>z</strong> (например, с 15.6.2 до 15.6.3).</li>\n<li>При выпуске <strong>новых возможностей</strong> или <strong>несущественных исправлений</strong>, мы делаем <strong>минорный релиз</strong>, изменяя число <strong>y</strong> (например, с 15.6.2 до 15.7.0).</li>\n<li>При выпуске <strong>обратно несовместимых изменений</strong>, мы делаем <strong>мажорный релиз</strong>, изменяя число <strong>x</strong>  (например, с 15.6.2 до 16.0.0).</li>\n</ul>\n<p>Мажорные релизы могут содержать новые возможности. Каждый релиз может содержать исправления ошибок.</p>\n<p>Минорный релиз — самый распостранённый тип релизов.</p>\n<h3 id=\"breaking-changes\"><a href=\"#breaking-changes\" 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<blockquote>\n<p>Данная политика версионирования не относится к предварительным сборкам в каналах следующих и экспериментальных версиях. <a href=\"/docs/release-channels.html\">Узнать подробнее о предварительных версиях.</a></p>\n</blockquote>\n<p>Обратно несовместимые изменения неудобны для всех, поэтому мы стараемся минимизировать количество мажорных релизов. Например, React 15 был выпущен в апреле 2016 года, а React 16 — в сентябре 2017 года. React 17 ожидается где-то в 2020 году.</p>\n<p>Вместо этого мы выпускаем новые возможности в минорных релизах. Это значит, что минорные релизы зачастую более интересны, чем мажорные, несмотря на порядковый номер версии.</p>\n<h3 id=\"commitment-to-stability\"><a href=\"#commitment-to-stability\" 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, мы стараемся упростить изучение новых возможностей. Кроме этого, мы стараемся сохранить работу старых API, даже если требуется их перенос в отдельный пакет. Например, <a href=\"/blog/2016/07/13/mixins-considered-harmful.html\">мы отказались от примесей несколько лет назад</a>, но они до сих пор поддерживаются <a href=\"/docs/react-without-es6.html#mixins\">через create-react-class</a> и многие проекты продолжают их использовать в стабильном, устаревшем коде.</p>\n<p>Больше миллиона разработчиков React используют, поддерживая миллионы компонентов. Только в кодовой базе Facebook более 50 000 React-компонентов. Всё это обязывает нас делать обновления до новых версий как можно проще. Если мы не предоставим возможности для обновления, люди застрянут на старых версиях. Мы тестируем наши <em>пути обновления</em> прямо в Facebook — если наша команда из 10 человек может обновить более 50 тысяч компонентов, мы думаем, что с этим справятся и другие React-разработчики. Во многих случаях для обновления синтаксиса компонентов мы пишем <a href=\"https://github.com/reactjs/react-codemod\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">скрипты автоматизации</a>, которые выкладываем в открытый доступ для всеобщего использования.</p>\n<h3 id=\"gradual-upgrades-via-warnings\"><a href=\"#gradual-upgrades-via-warnings\" 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 включают множество полезных предупреждений. Когда возможно, мы добавляем предупреждения для будущих обратно несовместимых изменений. Таким образом, если ваше приложение не показывает предупреждений в консоли в последнем релизе, значит оно готово к следующей мажорной версии. Это позволяет вам обновлять приложение компонент за компонентом по одиночке.</p>\n<p>Предупреждения в режиме разработки не влияют на то, как исполняется ваше приложение. Таким образом, вы можете быть уверены, что ваше приложение будет вести себя одинаково в режиме разработки и продакшен-режиме. Разница лишь в том, что продакшен-сборка не будет показывать предупреждения в консоли, что, к тому же, более производительно. (Если вы вдруг заметили предупреждение в продакшен-режиме, откройте ишью.)</p>\n<h3 id=\"what-counts-as-a-breaking-change\"><a href=\"#what-counts-as-a-breaking-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>Как правило, мы <em>не</em> повышаем мажорную версию для следующих изменений:</p>\n<ul>\n<li><strong>Предупреждения для разработчиков.</strong> Поскольку они не затрагивают поведение в продакшен-режиме, мы можем добавлять или изменять существующие предупреждения между мажорными версиями. Это позволяет нам заранее предупреждать о новых мажорных изменениях.</li>\n<li><strong>API с приставкой <code class=\"gatsby-code-text\">unstable_</code>.</strong> Они добавляют экспериментальные возможности, в API которых мы не уверены до конца. Выпуская такие возможности с приставкой <code class=\"gatsby-code-text\">unstable_</code>, мы можем их обновлять и переходить к стабильному API быстрее.</li>\n<li><strong>Альфа и канареечные версии React.</strong> Альфа-версии React позволяют попробовать новые возможности раньше. Мы можем вносить в них изменения на основе обратной связи, полученной в период альфа-тестирования. Если вы используете такие версии, имейте в виду, что API может измениться в стабильной версии.</li>\n<li><strong>Недокументированные API и внутренние структуры данных.</strong> Мы не гарантируем работоспособность кода в случае использования <code class=\"gatsby-code-text\">__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED</code>, <code class=\"gatsby-code-text\">__reactInternalInstance$uk43rzhitjg</code> или других внутренних переменных.</li>\n</ul>\n<p>Наша политика разработана, чтобы быть практичной. Мы не хотим создавать вам головную боль. Если бы мы поднимали мажорную версию слишком часто, то доставили бы множество проблем всему сообществу. И это бы не позволило улучшать React так быстро, как нам хотелось.</p>\n<p>Если мы думаем, что изменения могут вызвать проблемы в сообществе, мы постараемся сделать всё возможное, чтобы предоставить плавный переход от старой версии к новой.</p>\n<h3 id=\"minors-versus-patches\"><a href=\"#minors-versus-patches\" 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://semver.org/lang/ru/#spec-item-7\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Это допускается семантическим версионированием</a>, в котором говорится, что <strong>”[минорная версия] МОЖЕТ быть увеличена в случае реализации новой функциональности или существенного усовершенствования в приватном коде. Версия МОЖЕТ включать изменения, характерные для патчей.»</strong></p>\n<p>Тем не менее, возникает вопрос, почему эти версии не являются патчами.</p>\n<p>Ответ прост: любое изменение в React (как и в любой другой программе) несёт определённый риск непредвиденных ситуаций. Представьте ситуацию, в которой выпуск патч-релиза, исправляющий один баг, случайно вносит новый. Подобное не только негативно влияет на разработчиков, но и подрывает их уверенность в будущих патч-релизах. Особенно печально, если исправлялся баг, редко встречающийся на практике.</p>\n<p>У нас довольно хороший опыт в выпуске релизов React без багов, но патч-релизы имеют более высокую планку надёжности, поскольку большинство разработчиков предполагают, что они могут быть приняты без негативных последствий.</p>\n<p>По этим причинам мы используем патч-релизы только для критических багов и уязвимостей в безопасности.</p>\n<p>Если в релиз включены несущественные изменения — такие как внутренний рефакторинг, изменения деталей реализации, улучшение производительности или исправление мелких багов — мы увеличим минорную версию, даже если ничего нового нет.</p>","frontmatter":{"title":"Политика версионирования","next":null,"prev":null},"fields":{"path":"content/docs/faq-versioning.md","slug":"docs/faq-versioning.html"}}},"pageContext":{"slug":"docs/faq-versioning.html"}},"staticQueryHashes":[]}