Автор: Чарли Мидтлинг.
Перевод: сумасшедший технический ботаник
оригинал:javascript.christmas/2019/10
Копирование без разрешения строго запрещено
Каждой команде приходится принимать различные решения в процессе разработки. который обычно включаетyarn,npmили другие инструменты для создания и упаковки кода javascript. Некоторые разработчики стремятся двигаться в определенном направлении, и иногда они тратят много времени, пытаясь принять решения, которые на самом деле мало влияют на их работу.
Во-первых, чтобы понять, почему было принято такое интересное решение, нам нужно взглянуть на историю управления пакетами в javascript.
- перед нпм: Зависимости внешнего интерфейса сохраняются в репозиторий и загружаются вручную 📁
-
2010:
npmПубликуйте и поддерживайтеnodejs📦 -
2012:
npmиспользование резко увеличилось - в основном из-заBrowserifysПоддержка браузера 🎉 -
2012:
npmесть конкурентbower, он полностью поддерживает браузер 💻 - 2012-2016: Количество зависимостей для фронтенд-проектов умножается 🤯
- 2012-2016: Создание и установка интерфейсных приложений становится все медленнее 🐢
-
2012-2016: Большое количество (дубликатов) зависимостей хранится в магическом
node_modulesвнутри вложенных папок ☢️ -
2012-2016:
rm -rf node_modulesСтаньте самой используемой командой для фронтенд-разработчиков. 🗑 -
2015:
bowerпроигралnpm💀 -
2015:
node_modulesИзменено на плоскую файловую структуру! 🕸 -
2016:
left-padсделать заголовки в то время👈 -
2016:
yarnПост 🚀- служба поддержки
npmа такжеbowerсклад -
yarn.lockВозможность блокировки установленных версий и предоставления детерминированных зависимостей. больше никогдаrm -rf node_modules! -
yarn installВремя, потраченноеnpm installполовина (без использования кеша) - Кэш и автономный режим делают процесс сборки практически не занимающим времени
- служба поддержки
-
2016:
npmвыпускатьshrinkwrap🧯- Попытка справиться с блокировкой зависимостей
- К сожалению, некоторые ошибки и обещания, выходящие за рамки его возможностей управления, привели к снижению репутации инструмента.
-
2017:
npm5 сообщений 🔓-
package-lock.jsonих новый инструмент,shrinkwrapотложить в сторону -
package-lock.jsonначать сyarnsзаблокировать конфликт файлов
-
-
2018:
npm ciПост 🛬- использовать напрямую
package-lock.jsonкод сборки - Отсутствие дорогостоящего анализа безопасности зависимостей и анализа версий
- Значительно сокращено время сборки на сервере сборки!
- использовать напрямую
-
2018:
npm6 сообщений 👮♀️-
npmПроверьте наличие дыр в безопасности в зависимостях, которые будут установлены -
yarnа такжеnpmВремя сборки больше не отличается существенно
-
-
2019:
tinkНачните входить в бета-режим 🦋- избегать использования
node_modules, вместо этого создайте файл с хешем для каждой зависимости в проекте - Не готов к производству
- избегать использования
- ...
эй... 🥵
Как мы можем видеть,yarnПосле публикации,npmВдохновил (и заставил?) разработать множество хороших инструментов и механизмов.yarnпотому что решено сnpmполучил признание за некоторые важные вопросы, связанные с ним, и начал оказывать давление на конкурентов в 2016 году. Скорость обработки пакетов, безопасность и детерминизм — важные функции, которые позволяют современным разработчикам сосредоточиться на создании ценности, не споря о двух инструментах.
Вывод 🤔
Для удобства рекомендую большинству команд (которым приходится принимать множество других более важных технических решений) выбрать самый простой вариант —npm. следуетnodeпредоставляются вместе и в настоящее время достаточно хорошо справляются с управлением пакетами.
Всегда ли есть исключения? 🧐
При использовании монорепозиторияyarn workspacesявляется популярной альтернативой, в то время какnpmэквивалентной альтернативы не предусмотрено.lernaэто пакет, который также поддерживает использование монорепозиториев и может использоваться сnpmа такжеyarn(с участиемworkspaces) использовать вместе.
пнм 🥉
PS: Следует отметить, что,pnpmэто третий вариант для менеджеров пакетов. еслиpnpmСмысл продажи в том, что если пакет уже загружен в локальный репозиторий, он не будет загружен снова - аналогично управлению зависимостями maven в Java. На момент написания этой статьиpnpmлучшеyarnилиnpmЗрелые и не могут быть помещены в производственную среду.