Часть работы инженера-программиста, особенно внештатного или агентского инженера-программиста, заключается в том, чтобы привыкнуть к работе с множеством различных технологических стеков. Каждый клиент уникален. Они основали свою компанию в разное время, и к их кодовым базам прикасались разные руки. Некоторые компании стремятся к более готовым решениям, таким как WordPress и Shopify, в то время как другим компаниям нужны индивидуальные сборки.

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

Что такое диспетчер пакетов

Прежде чем обсуждать тонкие различия между NPM и Yarn, мы должны сначала определить, в чем они заключаются. И NPM, и Yarn — это менеджеры пакетов, ориентированные на код JavaScript. Менеджер пакетов — это набор программных средств, последовательно автоматизирующих процесс установки, обновления, обновления, настройки и удаления компьютерных программ с компьютера.

Проще говоря, менеджер пакетов — это программное обеспечение, которое помогает вам загружать и управлять программным обеспечением более упорядоченным образом. Конечно, вы можете зайти на веб-сайт каждого поставщика программного обеспечения, загрузить их zip-файл, решить, где хранить файл, запустить его мастер, возможно, добавить программное обеспечение в вашу среду PATH, а затем использовать программное обеспечение. Но проще сказать вашему менеджеру пакетов, какое программное обеспечение вам нужно, и позволить ему получить его за вас.

Похожим, но не точным примером менеджера пакетов, с которым вы, возможно, знакомы, является магазин приложений. Подобно диспетчеру пакетов, магазин приложений объединяет все приложения или программное обеспечение, которое вы можете загрузить, в одном месте. Вам не нужно беспокоиться о переходе на веб-сайт конкретного приложения для загрузки приложения, магазин приложений напрямую ссылается на репозиторий компании. При этом вам не нужно беспокоиться об отслеживании последней версии программного обеспечения, потому что магазин приложений отслеживает обновления и информирует вас о них.

Сравнение магазина приложений и менеджера пакетов не идеально. Основное различие между менеджером пакетов и магазином приложений заключается в том, что магазин приложений не управляет зависимостями пакета за вас. Программное обеспечение часто создается на основе другого программного обеспечения, которое со временем обновляется. Магазины приложений не отслеживают, какие зависимости привязаны к приложению или изменяются ли они.

Что такое NPM?

Теперь, когда мы установили, что такое менеджер пакетов, давайте посмотрим на наш первый менеджер пакетов: NPM. NPM был основан в 2009 году как менеджер пакетов специально для пакетов JavaScript. Он превратился в крупнейший реестр программного обеспечения в мире и был приобретен Github в 2020 году.

В NPM есть 3 компонента: веб-сайт, инструмент командной строки и реестр. Веб-сайт является отличным местом для изучения и обнаружения пакетов и установления присутствия. Инструмент командной строки является наиболее знакомым аспектом для разработчиков, поскольку вы используете этот инструмент для загрузки пакетов в свои проекты. Реестр — это репозиторий, в котором хранится весь код и метаданные.

С NPM вы можете либо потреблять, либо создавать код. Репозитории позволяют легко проверять чужой код, создавать функции или исправлять ветки и легко объединять изменения. NPM — отличная экосистема как для пакетов с открытым исходным кодом, так и для предприятий. У них есть одна особенность — возможность установить видимость пакета как частную или общедоступную. Таким образом, компании могут создавать пакеты NPM для использования внутри своей компании, не раскрывая бизнес-логику или собственный код миру.

Что такое пряжа?

Пряжа была создана группой разработчиков из таких компаний, как Facebook, Google, Exponent и Tilde. У этих крупных инженерных компаний были проблемы с управлением пакетами и зависимостями, что часто приводило к потере времени разработчиков на устранение неполадок. Чтобы решить эти проблемы, они решили создать новый менеджер пакетов.

Yarn — это в основном новый инструмент интерфейса командной строки, который позволяет пользователям детерминировано управлять пакетами своего проекта. Простой инструмент командной строки — это одна из функций продукта, которая включает в себя совместимость как с NPM, так и с Bower, а также надежные возможности лицензирования. Хотя Yarn был создан крупными техническими инженерами, сегодня он остается инструментом с открытым исходным кодом.

Один лучше другого?

У большинства команд не будет проблем ни с одним из менеджеров пакетов, но Yarn был создан в ответ на проблемы, с которыми компании сталкивались при масштабировании. NPM использует два элемента для записи и хранения зависимостей пакетов. Файл package.json используется для хранения всех прямых зависимостей проекта. Когда вы загружаете пакет, имя и версия сохраняются здесь.

Другой элемент записи — каталог node_modules. Именно в этом каталоге хранятся зависимости каждого пакета. Разработчики Yarn обнаружили, что каталог node_modules изменился с разработчика на разработчика в зависимости от порядка установки зависимостей. Это происходит из-за того, что установленные зависимости могут совместно использовать зависимости, для которых требуются разные версии.

Yarn использует алгоритм установки и блокировки файлов, чтобы сделать установку пакетов детерминированной или всегда давать одни и те же результаты. Это большое улучшение для команд, поскольку оно устраняет проблемы с компьютером или установкой, поскольку все сталкиваются с одним и тем же процессом. Это главное преимущество Yarn перед NPM.

Итог

Если вы разрабатываете проект в качестве одиночного разработчика или даже с небольшой командой, вы, вероятно, можете использовать NPM. Однако, если вы беспокоитесь об управлении программным обеспечением для больших групп разработчиков, вы можете рассмотреть возможность использования Yarn для его детерминированного управления зависимостями. Из-за взаимодействия между Yarn и NPM вы можете выбрать любой из них или выбрать Yarn и по-прежнему иметь доступ ко всем пакетам, хранящимся в репозитории NPM.