Анонс Yarn 1.0

Mad Eight
5 min readSep 8, 2017

--

Сегодня мы рады анонсировать релиз менеджера пакетов для JavaScript Yarn под версией 1.0, мы считаем это важным шагом для нашего проекта. Yarn получил большую популярность спустя 11 месяцев после первого релиза. На данный момент более 175,000 проектов на GitHub содержат файл yarn.lock в корневой папке. Используемый в больших и маленьких компаниях, а так же по всему open source сообществу, Yarn отвечает за загрузку около 3 миллиардов пакетов в месяц. Сокращая время установки Yarn привлекает множество пользователей. Twitter и Microsoft на outlook.com, сократили время установки в 5 раз. Expo, Kenzan, и Sentry сообщают об улучшении производительности и стабильности, благодаря чему они могут поставлять код быстрее. Так же теперь Yarn поставляется с ведущими платформами интеграции, такими как CircleCI, Travis CI, и AppVeyor.

В Facebook Yarn стал применяться в кодовых базах для сайта и основного приложения Facebook, Instagram, Oculus и WhatsApp. Каждый день Yarn оказывает поддержку в установке сотен тысяч пакетов для наших систем. Он был разработан для масштабируемых систем, в которых может быть сотни или даже тысячи прямых или вспомогательных зависимостей. Установка проходит быстро и безопасно используя опцию офлайн зеркал, которая безотказна и воспроизводима не только на разных компьютерах наших инженеров, но и в наших системах интеграции.

Мы в восторге от того как сообщество приняло и использует наше решение. Основными целями, когда мы выпустили Yarn, были стабильность, отказоустойчивость и производительность. Отталкиваясь от основных принципов, которые сделали Yarn успешным, релиз 1.0 имеет множество новых функций, которые как нам кажется, помогут сообществу Yarn двигаться быстрее и создавать большие проекты. Открытый код проекта и сайт получил огромное содействие от open source сообщества, и множество функций в Yarn 1.0 были разработаны и реализованы членами сообщества.

Что нового в версии 1.0

Yarn Workspaces

Мы видели как подход в виде моно-репозитория для исходного кода, популяризированный большими компаниями как Facebook, потихоньку набирает обороты в open source сообществе и маленьких компаниях. Основной причиной перехода к такому подходу было удобство обмена кода, между всеми проектами избегая при этом проблем синхронизации. Чтобы сделать использования этого подхода более простым Yarn добавил новую функцию: Workspaces. Это позволяет автоматически объединять зависимости из всех файлов package.json и устанавливать их за один раз. Он так же использует один файл yarn.lock в корне проекта, чтобы зафиксировать все зависимости. Более того, Yarn создаст символическую ссылку между всеми рабочими областями, которые будут зависеть друг от друга, что в конечном итоге приведет к тому, что во всех проектах будет использоваться последняя версия кода.

Workspaces уже используются в некоторых командах Facebook и таких проектах как Babel. Если вы используете Lerna (популярная система управления моно-репозиториями), вы можете начать использовать Yarn’s Workspaces. Прекрасным примером того как перейти на использование Workspaces вы сможете найти в pull request для Babel. С введением Workspaces в Yarn, мы надеемся помочь вам с более быстрой и простой установки пакетов, а так же избежать дублирования пакетов между малыми частями большого проекта.

Автоматическое объединение lock файлов

В быстро меняющихся проектах с большим количеством участников, зависимости могут быть обновлены в последовательных pull request-ах. Как результат может произойти конфликт в файле yarn.lock при объединении. Когда это происходит с одним или двумя пакетами это достаточно просто устранить. Но если конфликтующих пакетов несколько, разрешение такого конфликта может стать утомительным занятием.

С новой функцией автоматического объединения, Yarn можете автоматически решить за вас конфликты в вашем yarn.lock файле, при помощи запуска yarn install. Если функция сможет сама разрешить проблемы в вашем yarn.lockфайле, новый файл будет сохранен, вам же остается только пометить файл как resolved в вашей системе контроля версии.

В следующий раз когда у вас возникнет конфликт с yarn.lock файлом, чтобы сэкономить свое время, просто выполнитеyarn install вместо ручного разрешения конфликта.

Разрешение выборочной версии

Иногда оказывает, что пакет может получить важные обновления или обновления безопасности, которые должны быть приняты как можно скорее. К сожалению, ваш проект не всегда может быть зависим напрямую от такого пакета, а скорее использовать его через несколько уровней зависимости. К сожалению, вам либо придётся ждать когда, такой пакет будет обновлен или же создать fork такого пакета, и обновите список зависимостей для нового пакета. Идеального варианта, к сожалению нет. Функция разрешения выборочной версии в Yarn была добавлена, чтобы решать такую проблему.

Yarn теперь позволяет использовать поле resolutions в файле package.json который указывает Yarn использовать определенную версию определенной под зависимости, независимо от шаблона установленного его предками. Эта опция достаточно гибкая и универсальная чтобы определить правила, по которым можно добавить нужную вам версию пакета в ваши под зависимости. Вот пример того как эта опция может выглядеть чтобы ограничить под зависимости в использовании пакета и заставить использовать пределенную версиюasync:

Очень важно, что эта функция были придумана и реализована членами сообщества. Рабочее предложение и приемочное тестирование были добавлены Victor Noël, а полная имплементация был разработана Kaylie Kwon.

Исправления и другие улучшения

Помимо новых особенностей, мы хотели бы упомянуть некоторые исправления:

Участие сообщества

Релиз Yarn 1.0 не состоялся бы без помощи open source сообщества. Yarn был создан как независимая организация на GitHub —совместным усилием нескольких компаний —и был быстро принят огромным сообществом JavaScript.

Вскоре после запуска проекта, мы представили RFC процесс чтобы поощрять и обсуждать вклад сообщества. Многие из вышеперечисленных функций были предложены и реализованы сообществом. Более 40 авторов оказали влияние на проект в 2017 году. Вот некоторые из основных моментов:

Что дальше?

Разработка Yarn будет продолжена. Вот одни из ключевых моментов, которые мы хотим видеть в будущем. Если вам нравится та функциональность, которую мы делаем, присоединяйтесь к сообществу и начинайте вносить свой вклад!

Релиз Yarn

Поддержка open source проекта является не простой задача. Выпуск нового пакета обычно сопровождается созданием подробного списка изменений, выполнения правильного семантического управления версиями, синхронизация версий в соответствующих проектах, и другие действия которые обычно выполняются вручную мейнтейнерами или пользовательскими скриптами. Было бы прекрасно, если бы Yarn давал поддержку разработчикам авторам этих библиотек с их утомительной работой?

Безопасность пакетов

Проверка пакетов это важный шаг, когда вы добавляете новый или обновляете старый. Мы хотели бы видеть Yarn играющим роль в повышении надежности установленных пакетов. Мы собираемся начать сотрудничать с npm для обеспечения двухфакторной авторизации с Yarn.

Семантическое Версионирование

С релизом 1.0, мы стремимся не создавать фундаментальные изменения в минорных версиях и патчах. С нашей стороны мы ставим себе целью уделить большое внимание в процессе оптимизации выпусков.

https://code.facebook.com/posts/274518539716230

--

--