
Всем привет. На этой неделе компания facebook открыла в опенсорс свой пакетный менеджер для ноды, как замену npm. Этот пакетный менеджер называется yarn. И сейчас самое время разобрать, в чем отличия yarn от npm и вообще стоит ли его юзать. Собственно, вот список того, что реализовали в этом пакетом менеджере и что я считаю очень классным:
Давайте попробуем.
Установим пакет командой
brew install yarn
Теперь давайте создадим новую папку для нашего проекта и напишем там
yarn init
Эта команда, как и npm init просто создает новый файл package.json.
Дальше, допустим, мы хотим установить express.
yarn add express
Yarn скачивает нам express с npm.org. И создает lock файл. Давайте посмотрим, как это выглядит. Вот у нас есть node_modules, package.json и yarn.lock. Если мы посмотрим на содержимое package.json, то увидим, что в dependencies у нас указан express, как было бы при использовании npm. Давайте откроем файл yarn.lock. Здесь все интереснее. У нас указана куча пакетов. То есть это все зависимости express и здесь везде указаны точные версии, поэтому если мы еще раз будем писать yarn, для того, чтобы установить все пакеты, то у нас установятся точные зависимости и не поломается проект, если у нас какая-то зависимость обновится.
Если вы хотите обновить все пакеты мы можем написать команду
yarn upgrade
Это удаляет полностью lock файл и переустанавливает все пакеты. Как мы видим, yarn upgrade просто перегенерировал нам yarn.lock и package.json.
Если же, например, мы хотим установить все пакеты заново напишем
rm -rf node_modules
yarn
Эта команда читает сейчас yarn.lock и устанавливает все пакеты. Как мы видим, это очень быстро. Вот оно их скачало, то так как express у нас уже скачан, то оно его взяло локально и засунуло его в package.json, node_modules и сохранило lock файл. И все это было за 2 секунды. На большом проекте реально видна скорость.
Если же мы хотим удалить какой-то пакет, например express, мы пишем
yarn remove express
Это удаляет пакет и все его зависимости. Теперь если мы откроем файл package.json, то мы увидим, что dependencies пустые, а если мы посмотрим yarn.lock, то увидим, что он пустой и в нем нет никаких записей.