Автор: Чарли Мидтлинг.
Перевод: сумасшедший технический ботаник
оригинал: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:
npm
5 сообщений 🔓-
package-lock.json
их новый инструмент,shrinkwrap
отложить в сторону -
package-lock.json
начать сyarns
заблокировать конфликт файлов
-
-
2018:
npm ci
Пост 🛬- использовать напрямую
package-lock.json
код сборки - Отсутствие дорогостоящего анализа безопасности зависимостей и анализа версий
- Значительно сокращено время сборки на сервере сборки!
- использовать напрямую
-
2018:
npm
6 сообщений 👮♀️-
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
Зрелые и не могут быть помещены в производственную среду.