Оба пакетных менеджера похожи как близнецы-братья, разница заключается в том, что Yarn значительно расширил свой функционал и считается более современной версией NPM. Но как уже подчеркивалось оба инструмента во многом похожи и использовать можно любой на выбор. При желании, переход не займет много времени.
Начнем с файла конфигурации: package.json — он актуален для каждого приложения.
Чтобы подключить Yarn в уже готовом проекте введите команду yarn
в результате выполнения команды Yarn изменит инфраструктуру и в директории node_modules
вы сможете наблюдать эти изменения.
Когда вы запустите yarn
или yarn add <имя пакета>
, Yarn создаст файл yarn.lock
в корневой директории вашего проекта. Не нужно читать или понимать этот файл — просто добавьте его в систему контроля версий. Когда другие люди начнут использовать yarn вместо npm
, yarn.lock
файл будет гарантией того, что у них будут точно такие же зависимости, как и у Вас.
В большинстве случаев, после выполнения команд yarn
или yarn add
в первый раз, всё заработает сразу. В некоторых случаях, информация из файла package.json
не достаточно точная, чтобы выявить зависимости. Детерминированный способ, которым Yarn выбирает зависимости, выльется в конфликт зависимостей. Обычно это происходит в больших проектах, когда npm install
не срабатывает и разработчики часто удаляют директорию node_modules
и собирают все заново. Если такое произошло, вначале попробуйте использовать npm
, чтобы сделать версии зависимостей более точными, а потом переходите на Yarn.
Другие разработчики в проекте могут продолжать использовать npm
, так что не обязательно переходить всем на Yarn в одно и тоже время. Разработчики использующие yarn
получат точно такую же конфигурацию, как и у других, а разработчики использующие npm
могут получить немного отличающуюся конфигурацию, что является намеренным поведением npm
.
Позже, если вы решите что Yarn вам не подходит, вы можете вернуться к использованию npm
не прибегая к каким-либо изменениям. Вы можете удалить файл yarn.lock
если никто в проекте больше не будет использовать Yarn, но это не обязательно.
Если используется файл npm-shrinkwrap.json
, есть вероятность получить другой набор зависимостей. Yarn не поддерживает файлы npm shrinkwrap, так как они не обладают достаточной информацией для детерминированного алгоритма Yarn. Если Вы используете эти файлы, то, возможно, самым простым вариантом будет перевести всех разработчиков в проекте одновременно на использование Yarn. Просто удалите существующий файл npm-shrinkwrap.json
и проверьте вновь созданный yarn.lock
.
Сравнение команд CLI
npm (v5) | Yarn |
---|---|
npm install |
yarn install |
(Н/Д) | yarn install --flat |
(Н/Д) | yarn install --har |
npm install --no-package-lock |
yarn install --no-lockfile |
(Н/Д) | yarn install --pure-lockfile |
npm install [package] |
yarn add [package] |
npm install [package] --save-dev |
yarn add [package] --dev |
(Н/Д) | yarn add [package] --peer |
npm install [package] --save-optional |
yarn add [package] --optional |
npm install [package] --save-exact |
yarn add [package] --exact |
(Н/Д) | yarn add [package] --tilde |
npm install [package] --global |
yarn global add [package] |
npm update --global |
yarn global upgrade |
npm rebuild |
yarn install --force |
npm uninstall [package] |
yarn remove [package] |
npm cache clean |
yarn cache clean [package] |
rm -rf node_modules && npm install |
yarn upgrade |