N1kS Posted June 25, 2017 Share Posted June 25, 2017 (edited) Всем доброго времени суток, в данной статье я хотел бы немного рассказать о Yarn. Если вы знаете, что это такое и используете, либо твердо решили для себя, что не будете использовать Yarn, то можете просто закрыть данную статью. Предусловие Yarn - это пакетный менеджер, разработанный компанией Facebook, на стадии его разработки так же подключились Google, Exponent и Tilde. Цитата Мы успешно использовали NPM в Facebook в течение многих лет, но так как объем нашего кода и число разработчиков выросло, мы столкнулись с проблемами последовательности, безопасности и производительности. После попытки решить все эти вопросы, мы пришли к намерению создать собственное решение, чтобы обеспечить надежность управления разработкой. Итогом этой работы стал Yarn — быстрая, надежная и безопасная альтернатива клиенту NPM», — говорится в официальном блоге Facebook о новинке. Почему стоит использовать Yarn? Файл yarn.lock В файле package.json, с помощью которого Yarn и npm отслеживают зависимости, номера версий не указываются точно, вместо этого задается их диапазон. Таким образом, вы можете задать определенную основную или вспомогательную версию, при этом позволяя npm установить последний патч с исправлениями каких-либо багов. В идеальном мире семантического версионирования, релизы с патчами не содержат коренных изменений. Но, к сожалению, в реальности это не всегда верно. Стратегия, выбранная npm может привести к тому, что на двух машинах с идентичными файлами package.json будут установлены различные версии пакетов, что может привести к появлению багов. Чтобы избежать несоответствия версий, установленная версия закрепляется в файле блокировки. При каждом добавлении модуля создается файл yarn.lock. Таким образом вы можете гарантировать, что на другой машине будет установлен тот же самый пакет; при этом у нас сохраняется диапазон допустимых версий в файле package.json. В npm команда npm shrinkwrap так же генерирует файл блокировки, а команда npm install считывает его до чтения package.json, также как Yarn сначала читает yarn.lock. Разница состоит в том, что Yarn всегда автоматически обновляет yarn.lock, а в npm это надо делать вручную. Параллельная установка Независимо от того, устанавливается ли пакет с помощью npm или Yarn, при этом решается серия задач. В npm эти задачи выполняются последовательно и отдельно для каждого пакета, это значит, что пока пакет не установлен полностью, следующий пакет будет ждать. В Yarn эти операции выполняются параллельно, что улучшает производительность. Для сравнения я установил пакет express с помощью npm и Yarn, не используя кэш, файлы shrinkwrap или lock; всего в установке 42 файла. npm: 9 секунд Yarn: 1.37 секунд Я не поверил своим глазам. Повторение дало такие же результаты. Затем я установил gulp со 195 зависимостями. npm: 11 секунд Yarn: 7.81 секунд Кажется, что разница зависит от количества устанавливаемых пакетов, в любом случае Yarn быстрее. Yarn или npm: различия в интерфейсе командной строки Кроме функциональных отличий, в Yarn также отличаются команды. Некоторые команды npm удалены, некоторые модифицированы, а пара интересных команд добавлена. yarn global В отличие от npm, где глобальные операции выполняются за счет опции -g или --global, команды Yarn нуждаются в префиксе global. Также как и в npm, специфические для проекта зависимости глобально не устанавливаются. Префикс global работает только с командами yarn add, yarn bin, yarn ls и yarn remove. За исключением yarn add, все эти команды идентичны своим эквивалентам в npm. Документация global. yarn install Команда npm install устанавливает все зависимости из файла package.json и позволяет вам добавлять новые пакеты. Команда yarn install только устанавливает зависимости, перечисленные в файле yarn.lock или package.json, именно в таком порядке. Документация yarn install Документация npm install yarn add [–dev] Аналогично npm install <package>, команда yarn add <package> добавляет пакет и устанавливает зависимости. Как видно из названия команды, она добавляет зависимости, это означает автоматическое сохранение ссылки на пакет в файле package.json, также как это делается в npm с флагом --save. Флаг --dev в Yarn добавляет зависимости для разработки, также как флаг --save-dev в npm. Документация yarn add Документация npm install yarn licenses [ls|generate-disclaimer] На момент написания в npm нет эквивалента этой команды. Yarn licenses lsвыводит список лицензий всех установленных в проекте пакетов, а yarn licenses generate-disclaimer генерирует дисклеймер, содержащий текст всех лицензий всех пакетов в проекте. Некоторые лицензии требуют включать текст лицензии в ваш проект, поэтому этот инструмент весьма полезен. Документация yarn licenses yarn why Эта команда смотрит в граф зависимостей и выясняет, почему указанный пакет установлен в вашем проекте. Возможно, вы сами добавили его, а, может, это зависимость установленного вами пакета. Команда yarn why помогает вам с этим разобраться. Документация yarn why yarn upgrade Эта команда обновляет пакеты до последней версии, соответствующей диапазону из package.json вместо установки точных версий из yarn.lock. Чтобы добиться того же в npm, вам надо последовательно выполнить: rm -rf node_modules npm install Эту команду не надо путать с npm update, обновляющей пакеты до самой свежей версии. Документация yarn upgrade yarn generate-lock-entry Команда yarn generate-lock-entry генерирует файл yarn.lock на основе зависимостей из package.json. Это похоже на npm shrinkwrap. Эту команду следует использовать с осторожностью, так как файл блокировки генерируется и обновляется автоматически при добавлении и обновлении зависимостей с помощью yarn add и yarn upgrade. Документация yarn generate-lock-entry Документация npm shrinkwrap Стабильность и надежность А что, если шумиха вокруг Yarn преждевременна? В первый же день релиза появилось много сообщений о проблемах, но темпы решения проблем поражают. Это показывает серьезную работу по обнаружению и исправлению багов. Если смотреть на количество и типы проблем, Yarn кажется стабильным для большинства пользователей, но он может не подойти для каких-то отдельных случаев. Учтите, что несмотря на то, что пакетный менеджер может быть очень важен для вашего проекта, это всего лишь пакетный менеджер. Если возникают проблемы, то переустановка пакетов не должна быть сложной, также как и возврат к npm. Перспективы Возможно, вы опасаетесь повторения истории с Node.js и io.js. Напомню, что io.js был форком Node.js, созданным несколькими основными разработчиками после разногласий по поводу управления проектом. Меньше, чем через год, обе команды пришли к соглашению, io.js был слит с Node.js и прекращен. Независимо от того, кто был прав, это обогатило Node.js новыми функциями. Я вижу схожие паттерны между npm и Yarn. Хотя Yarn это не форк, он исправляет некоторые из недостатков npm. Разве будет плохо, если npm учтет это и попросит Facebook, Google и остальных разработчиков Yarn улучшить npm? Хотя об этом слишком рано пока говорить, но я надеюсь, что так и произойдет. В любом случае, будущее Yarn выглядит светлым. Сообщество проявляет интерес к появлению нового пакетного менеджера. К сожалению, пока отсутствует дорожная карта проекта, поэтому я не знаю, какие сюрпризы Yarn готовит для нас. Заключение По умолчанию Yarn набирает больше очков, чем npm. У нас есть файл блокировки, установка пакетов быстра, как никогда и они все автоматически сохраняются в package.json. Последствия установки и использования Yarn минимальны — вы можете попробовать его только в одном проекте, чтобы увидеть, подходит он вам или нет. Это делает Yarn превосходной заменой npm. Я мог бы однозначно рекомендовать попробовать Yarn в каком-нибудь проекте, раньше или позже. Если вы осторожны в установке и использовании новых программ, подождите пару месяцев. В конце концов, npm проверен в боевых условиях, а в мире разработки программного обеспечения это немаловажно. Если же вы замечали, что вам приходиться ждать окончания установки пакетов npm, то вам самое время ознакомиться с руководством по переходу на Yarn. Пару слов от себя Yarn устанавливает пакеты гораздо быстрее, чем npm. Если в вашем проекте более одного разработчика, то используя Yarn вы может быть уверенны в том, что у всех разработчиков будут установлены пакеты одинаковых версий, что исключит возможность некорректной работы кода из-за версии пакета. Официальный сайт: https://yarnpkg.com/ Источники: https://habrahabr.ru, http://prgssr.ru Edited June 26, 2017 by N1kS 3 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now