
Менеджеры пакетов — это программные инструменты, которые помогают программистам и разработчикам устанавливать, обновлять и удалять пакеты кода, библиотек или другого программного обеспечения.
Существует множество менеджеров пакетов для различных языков программирования, таких как NPM в JavaScript и GEM в Ruby.
Менеджеры пакетов обычно используют метаданные, чтобы определить, какие версии пакета доступны, и зависимости каждой версии менеджеров пакетов различаются в зависимости от типа автоматизированного программного обеспечения, которое они устанавливают и обновляют.
Примеры включают apt-get, DNF (Fedora/Red Hat), Pacman (Arch Linux) и npm (Node.js).
Пакет может быть добавлен или удален из этого общего пула любым пользователем. Пакеты обычно загружаются с удаленных серверов, но также могут быть установлены локально.
Что такое менеджер пакетов?
Диспетчер пакетов — это часть программного обеспечения, которая управляет установкой, обновлением и удалением пакетов компьютерного программного обеспечения.
Менеджер пакетов хранит пакеты в центральном месте на жестком или сетевом диске. Это позволяет нескольким пользователям совместно использовать одну копию пакета.
Менеджеры пакетов, такие как npm install и yarn add, часто основаны на интерфейсе командной строки. Обычно приложения JavaScript имеют много зависимостей, и этими зависимостями управляет менеджер пакетов.
Node по умолчанию использует NPM. Однако в NPM отсутствуют некоторые расширенные функции, идеально подходящие для более сложных приложений, или он работает медленно при установке пакетов или разрешении зависимостей пакетов.
Yarn и PNPM, созданные сообществом менеджеры пакетов, появились для решения вышеуказанной проблемы. В последние несколько лет пряжа стала медленнее, но сегодня это, наверное, самый популярный вариант.
В мире управления пакетами PNPM появился последним игроком, который ускорил установку и обновление пакетов.
Сравнение NPM, YARN и PNPM
NPM — это менеджер пакетов для JavaScript, изначально разработанный проектом Node.js. Это позволяет разработчикам легче обмениваться кодом в разных проектах и использовать код других людей в своих собственных проектах.
Yarn — менеджер пакетов для JavaScript, разработанный Facebook. Это быстро, надежно и безопасно.
PNPM — это новый менеджер пакетов для JavaScript, созданный на основе npm для упрощения процесса установки пакетов в приложениях Node. PNPM является альтернативой NPM. Он следует тем же принципам, что и NPM, но имеет некоторые дополнительные функции, которые делают его более мощным, чем его предшественник.

1. Производительность и дисковая эффективность
NPM: немного медленнее по сравнению с Yarn и PNPM.
YARN: Yarn использует тот же каталог flatten node_modules, но сравним с NPM по скорости и устанавливает пакеты параллельно.
PNPM: PNPM в 3 раза быстрее и эффективнее, чем NPM. Как с холодным, так и с горячим кэшем PNPM работает быстрее, чем Yarn.
Pnpm просто связывает файлы из глобального хранилища, а yarn копирует файлы из своего кеша. Версии пакетов никогда не сохраняются на диске более одного раза.
Алгоритм pnpm не использует плоское дерево зависимостей, что упрощает его реализацию, поддержку и требует меньше вычислений.
Этот метод использовался в NPM 3 и более ранних версиях, но вложение было проблематичным, и поэтому пакеты приходилось копировать несколько раз для каждого пакета, который от них зависел.

С жесткими и символическими ссылками PNPM решил проблему, описанную выше, в отличие от NPM. PNPM сгруппировал все зависимости по символической ссылке, но сохранил все зависимости.
a symlink (or junction on Windows)
node_modules
├─ foo -> .registry.npmjs.org/foo/1.0.0/node_modules/foo
└─ .registry.npmjs.org
├─ foo/1.0.0/node_modules
| ├─ bar -> ../../bar/2.0.0/node_modules/bar
| └─ foo
| ├─ index.js
| └─ package.json
└─ bar/2.0.0/node_modules
└─ bar
├─ index.js
└─ package.json
PNPM также может сэкономить массу места по сравнению с двумя другими менеджерами пакетов.
2. Безопасность
NPM: были некоторые уязвимости в системе безопасности, которые напрямую повлияли на многие проекты из-за того, как npm обрабатывает плохие пакеты.
YARN: контрольные суммы, хранящиеся в yarn.lock, с тех пор используются Yarn Classic и Yarn Berry. Yarn также предотвращает установку вредоносных пакетов; при обнаружении несоответствия установка будет прервана.
PNPM: подобно Yarn, PNPM также использует контрольные суммы, и в дополнение к использованию контрольных сумм, pnpm также проверяет целостность своего кода перед его выполнением.
3. Поддержка монорепозиториев
Монорепозиторий состоит из нескольких изолированных репозиториев кода, размещенных в одном репозитории, чтобы избежать управления несколькими репозиториями.
NPM: менеджер пакетов NPM предлагает поддержку монорепозитория с различными командами CLI для управления несколькими пакетами. Однако, в отличие от других менеджеров пакетов, он не поддерживает расширенную фильтрацию или несколько рабочих областей.
YARN: он также предлагает поддержку монорепозитория в качестве функции рабочих пространств. Использование стороннего приложения Lerna до того, как стала доступна функция рабочей области, было единственным способом использовать менеджер пакетов в многопакетном проекте.
PNPM:проблема двойников NPM может быть решена только с помощью PNPM. Иногда монорепозитории кишат двойниками, поэтому у PNPM в этом отношении есть преимущество.
4. Рабочие процессы установки
Как я уже говорил, сначала необходимо установить менеджер пакетов локально и CI/CD.
NPM: это один из крупнейших в мире реестров пакетов, который следует устанавливать вместе с Node.js. Он использует файлы package.json и package.lock.json.
Чтобы загрузить пакет, откройте терминал и введите следующую команду:
npm install "package_name"
По умолчанию npm создает папку с именем package.json, и всякий раз, когда вы загружаете пакет с помощью npm, он будет помещаться сюда.
YARN:Чтобы решить проблемы NPM, был разработан YARN. Он предоставил много новых функций, которые позже были включены в npm, такие как файл блокировки с версиями, кэширование и так далее.
Пряжа использует package.json и yarn.lock files.
Вы можете установить Yarn разными способами — используя npm как npm-пакет с:
npm install -g yarn
PNPM: вы можете легко установить PNPM с пакетом npm.
npm install -g pnpm
5. Структура проектов
После завершения процесса установки будут созданы соответствующие файлы, которые можно легко просмотреть, а вся важная метаинформация будет храниться в файле с именем package.json.
NPM: с помощью npm install создается package-lock.json и папка node_modules. Вы можете вручную разместить файл конфигурации .npmrc на корневом уровне.
. ├── node_modules/ ├── .npmrc ├── package-lock.json └── package.json
YARN: это также создаст файл yarn.lock и папку node_modules. Вы также можете настроить свою пряжу с помощью файла .yarnrc; Yarn Classic также поддерживает файлы .npmrc.
. ├── .yarn/ │ ├── cache/ │ └── releases/ │ └── yarn-1.22.17.cjs ├── node_modules/ ├── .yarnrc ├── package.json └── yarn.lock
Помимо .yarn/cache/, можно использовать и другие места для хранения классических версий пряжи (.yarn/releases/).
PNPM. В отличие от NPM, PNPM не создает плоское дерево зависимостей. В node_modules у всего была собственная папка node_modules в package.json, и каждая зависимость была точно указана в package.json. До версии 3 npm структура node_modules была предсказуемой.
Проблема с этим подходом была двоякой:
- у Windows часто возникали проблемы с длинными путями к каталогам, вызванные пакетами со слишком глубокими деревьями зависимостей.
- пакеты были скопированы несколько раз, чтобы удовлетворить несколько зависимостей
PNPM решил эту проблему без выравнивания дерева зависимостей. Зависимости каждого пакета были сгруппированы вместе в папке node_modules, а символические ссылки использовались для группировки зависимостей вместе, поэтому дерево каталогов плоское.
. ├── node_modules/ │ └── .pnpm/ ├── .npmrc ├── package.json └── pnpm-lock.yml
Файл package.json создается после установки зависимостей с помощью pnpm i, также создается папка node_modules, но ее структура будет полностью отличаться от npm и yarn из-за подхода к хранению с адресацией по содержимому.
Пример:
node_modules
└── .pnpm
├── [email protected]
│ └── node_modules
│ └── bar -> <store>/bar
│ ├── index.js
│ └── package.json
└── [email protected]
└── node_modules
└── foo -> <store>/foo
├── index.js
└── package.json
Результат
Менеджеры пакетов сейчас в отличном состоянии. Почти все основные менеджеры пакетов достигли паритета функций. Есть отличия под капотом.
Хотя PNPM имеет некоторое сходство с NPM, их методы управления зависимостями совершенно разные; Подход PNPM обеспечивает более высокую производительность и более эффективное использование дискового пространства.
Вскоре Yarn Classic может перестать поддерживаться, поскольку считается устаревшим программным обеспечением.
Являясь новейшим претендентом на роль менеджера пакетов, Yarn Berry PnP до сих пор не в полной мере использовала свой потенциал для революционного изменения ландшафта управления пакетами.
Зависимости распространены в приложениях JavaScript. Менеджеры пакетов обычно используются для управления этими зависимостями. По умолчанию узел использует NPM.
Хотя в NPM отсутствуют некоторые дополнительные функции, он хорошо решает проблемы с зависимостями пакетов и устанавливает пакеты.
Выполните оценку отдельных пользователей, чтобы определить наличие медленных страниц, исключений JavaScript или неудачных вызовов AJAX. Получите быстрое представление о том, как меняется опыт ваших конечных пользователей в зависимости от сети или местоположения.
Трассировки сеанса позволяют вам видеть ход сеанса, выявлять медленные активы JavaScript, длительное время загрузки и выявлять ошибки.
Спасибо, что прочитали мою статью :)