В чем основное отличие между пряжей и гаммером?

Я хочу спросить, какой ваш любимый менеджер пакетов для JS? Я видел несколько статей о пряже и гамме. Но я не уверен, что может быть лучше для меня. Я просто начинаю изучать JS.

Прямо сейчас разница между пряжей и npm для меня, как разница между брендами колы.

Ответ 1

Были времена, когда у нас был только npm, но у него было так много проблем с разрешением зависимостей и кэшированием, что появился другой инструмент (yarn). Обычно для разрешения зависимостей использовался локальный кэш, и это было важно, например, при выполнении заданий CI, которые почти всегда выполняются в одной и той же среде, а высокая пропускная способность обходится дорого, поскольку вы платите за данные в облачных сервисах. Это означает, что в старых версиях npm, когда вы запускали npm install, и у вас был доступ в deps

Первая нота

Пожалуйста, поймите, что yarn был построен поверх пакетов npm, и https://www.npmjs.com/ это означает, что они оба используют реестр NPM для разрешения пакетов. поэтому, если вы запустите npm install [email protected] или yarn add [email protected], вы получите тот же результат

Инкрементная установка

[email protected]

При каждой новой сборке обе зависимости снова загружались из Интернета. Yarn использует yarn.lock и сравнивает ваш файл package.json с yarn.lock и определяет, какие пакеты необходимо извлечь дополнительно, чтобы только постепенно устанавливать новые зависимости

Многопоточность

yarn предлагает параллельную установку пакетов, которые не зависят от потоков. Это может снизить время установки до 1/10 времени от npm install

Блокировка версий

Как было сказано ранее, yarn генерирует yarn.lock после каждой установки, в которой сохраняются ВСЕ версии установленных пакетов (как вы, вероятно, знаете, у пакета могут быть зависимости, и у зависимости также могут быть свои собственные зависимости), поэтому он может создавать бесконечное дерево зависимостей, которое может привести к очень плохим конфликтам. Давайте представим этот сценарий

 - lodash^1
 - [email protected]
 - - [email protected]
 - [email protected]
 - - [email protected]

Представьте себе сценарий, когда сопровождающий another_module решает поднять lodash до критической версии изменений 1.2.0, что может случиться с тем, что npm в старые времена могли получать 2 разных экземпляра одной библиотеки и 2 разные версии, которые могли привести к очень странное поведение Потому что, поскольку у вас нет точной блокировки в вашем модуле (вы принимаете любую полуверсионную версию ^ 1.xx и ^ 2.xx, так что это означает, что оба подмодуля будут удовлетворять вашим требованиям, но выбирают другую версию. Пряжа заблокирует ваш yarn.lock AT ВРЕМЯ ДОБАВЛЕНИЯ нового пакета в проект, это означает, что когда другие разработчики в вашем проекте извлекут проект, у него также будут те же yarn.lock и yarn, в конечном счете, "имитировать" состояние пакета, как они были установлены, когда вы совершенный yarn.lock с другой стороны NPM просто смотрит на удовлетворение полузащиты и может получить 2 разные версии для 2 разработчиков (при условии, что со временем пакеты обновляются)

Конечная нота

Ребята из npm проделали большую работу, когда они выпустили [email protected], и я думаю, что все заявления теперь являются просто причинами, по которым yarn был создан и какие проблемы он решал в то время, но я думаю, что на сегодняшний день, между этими двумя в настоящее время нет большой разницы