Что вы выберете, npm или пряжу?

внешний интерфейс NPM

Автор: Чарли Мидтлинг.

Перевод: сумасшедший технический ботаник

оригинал:javascript.christmas/2019/10

Копирование без разрешения строго запрещено

img

Каждой команде приходится принимать различные решения в процессе разработки. который обычно включает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Зрелые и не могут быть помещены в производственную среду.

Добро пожаловать в общедоступную учетную запись внешнего интерфейса: Front-end Pioneer, получите бесплатный набор утилит для разработки внешнего интерфейса.