Facebook выпустил Yarn 1.0, пакетный менеджер для JavaScript
7 сентября 2017 года
Спустя 11 месяцев после открытия кода Facebook представил первый стабильный релиз пакетного менеджера Yarn 1.0, предназначенного для управления зависимостями в проектах на языке JavaScript и вобравшего в себя опыт и лучшие идеи менеджеров зависимостей Bundler, Cargo и npm. Исходные тексты распространяются под лицензией BSD. Сборки подготовлены для macOS, Windows и Linux.
Yarn позиционируется как замена npm, способная работать с репозиториями npm, но обеспечивающая более высокий уровень производительности, надёжности и безопасности. Основными причинами создания нового пакетного менеджера стала невозможность избавления npm от ряда проблем без его кардинальной переработки. В частности, npm не обеспечивает постоянство установленных зависимостей для разных пользователей и систем. В зависимости от порядка установки пакетов, структура директории node_modules существенно отличается у разных пользователей, что приводит в возникновению ситуаций, в которых у одного пользователя всё может отлично работать, а у другого может проявляться ошибка. Кроме того, npm работает очень медленно и имеет архитектурные проблемы с безопасностью, связанные с автоматическим выполнением кода из пакетов.
Для достижения высокой производительности в Yarn применена техника кэширования всех загруженных пакетов, что позволяет исключить ситуации, в которых может потребоваться повторная загрузка. Для ускорения также применяется распараллеливание операций, что позволяет существенно сократить время установки пакетов. Надёжность обеспечивается благодаря применению файлов-блокировок для привязки зависимостей к определённой версии и детерминированному алгоритму установки, гарантирующему, что установленный пакет будет работать идентично на любых системах. Для поддержания безопасности в Yarn осуществляется проверка целостности каждого установленного пакета по контрольным суммам.
Основные возможности Yarn:
- Режим работы в offline: если пакет устанавливался ранее, то его повторная установка может быть осуществлена без наличия сетевого соединения;
- Идентичность зависимостей: на любых системах, независимо от порядка установки, будет установлен точно такой же набор зависимостей;
- Оптимизация сетевого взаимодействия: применяются эффективные алгоритмы группировки пакетов в очередь и обеспечения максимальной пропускной способности при загрузке данных;
- Стойкость к проблемам в сети: сбой выполнения одного запроса не приводит к прерыванию установки, в случае проблем запрос будет повторён;
- Возможность комбинирования реестров: можно устанавливать любые пакеты из репозиториев npm и Bower;
- Плоский режим: для избежания появления дубликатов в Yarn предусмотрен анализ заменяемости версий зависимостей - при несовпадении версии, определяется возможность использования уже установленной версии;
- Возможность создания фильтров лицензий, допускающих для установки только модули с заданными лицензиями;
- Наличие стабильного JavaScript API и абстрактной модели журналирования для упрощения интеграции с различными сборочными инструментариями;
- Минималистичный интерфейс командной строки.
Новшества, представленные в выпуске Yarn 1.0:
- Включены по умолчанию рабочие области ( Workspaces), позволяющие автоматически агрегировать все зависимости из нескольких файлов package.json и дающие возможность установить всех их за один шаг или использовать для всех один файл-блокировку (yarn.lock);
- Добавлен механизм автоматического слияния изменений (auto-merge), позволяющий автоматически разрешать конфликты с yarn.lock, возникающие, когда в системе управления версиями несколько разработчиков добавляют в yarn.lock данные о разных зависимостях. Подобные конфликты теперь по возможности разрешаются в процессе выполнения команды "yarn install" и в результате создаётся новый yarn.lock, избавленный от конфликтов;
- Появились средства для выборочного определения версий, которые позволяют решить проблему с обновлением непрямых зависимостей. Например, в пакете может быть устранена важная ошибка или критическая уязвимость, но в текущем проекте этот пакет может использоваться не напрямую, а как зависимость у какого-то другого пакета. Раньше, пока не обновится этот другой пакет, не обновлялись и его зависимости. Теперь в package.json можно задать требуемые версии и для субзависимостей;
- Улучшен процесс интерактивного обновления;
- Ускорена проверка целостности файлов;
- Добавлен отдельный модуль для парсинга файлов блокировки.
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.