Компания Facebook представила новый пакетный менеджер Yarn, ориентированный на управление зависимостями в проектах на языке JavaScript. Yarn разработан совместно с инженерами из компаний Exponent, Google и Tilde, и вобрал в себя опыт и лучшие идеи менеджеров зависимостей Bundler, Cargo и npm, пишет OpenNews.
Исходный код распространяются под лицензией BSD. Сборки подготовлены для macOS, Windows и Linux.
Yarn позиционируется как замена npm, обеспечивающая более высокий уровень производительности, надёжности и безопасности. Основными причинами создания нового пакетного менеджера стала невозможность избавления npm от ряда проблем без его кардинальной переработки. В частности, речь идёт о медленной работе и архитектурных проблемах с безопасностью, связанных с автоматическим выполнением кода из пакетов.
Для достижения высокой производительности в Yarn применена техника кэширования всех загруженных пакетов. Для ускорения также применяется распараллеливание операций, что позволяет существенно сократить время установки пакетов. Надёжность обеспечивает применение файлов-блокировок. За поддержание безопасности в Yarn отвечает проверка целостности каждого установленного пакета по контрольным суммам.
Основные возможности:
- Режим работы в offline: если пакет устанавливался ранее, то его повторная установка может быть осуществлена без наличия сетевого соединения;
- Идентичность зависимостей: на любых системах, независимо от порядка установки, будет установлен точно такой же набор зависимостей;
- Оптимизация сетевого взаимодействия: применяются эффективные алгоритмы группировки пакетов в очередь и обеспечения максимальной пропускной способности при загрузке данных;
- Стойкость к проблемам в сети: сбой выполнения одного запроса не приводит к прерыванию установки, в случае проблем запрос будет повторён;
- Возможность комбинирования реестров: можно устанавливать любые пакеты из репозиториев npm и Bower;
- Плоский режим: для избежания появления дубликатов в Yarn предусмотрен анализ заменяемости версий зависимостей - при несовпадении версии, определяется возможность использования уже установленной версии;
- Возможность создания фильтров лицензий, допускающих для установки только модули с заданными лицензиями;
- Наличие стабильного JavaScript API и абстрактной модели журналирования для упрощения интеграции с различными сборочными инструментариями;
- Минималистичный интерфейс командной строки
Релоцировались? Теперь вы можете комментировать без верификации аккаунта.