Реестр пакетов

Оригинальное название: registry

Коротко

Сервер-хранилище, где публикуют библиотеки с версиями и описаниями и откуда менеджер пакетов скачивает зависимости проекта. Самый известный во фронтенде — реестр npm.

Что такое «Реестр пакетов»

Когда в проекте выполняют npm install, менеджер пакетов читает список зависимостей из package.json и обращается к реестру: какие версии библиотеки есть, где лежит архив, какие у неё собственные зависимости. По умолчанию это публичный реестр registry.npmjs.org. У PHP своя площадка — Packagist, откуда берёт пакеты Composer. Реестр и менеджер пакетов — разные вещи: первый хранит, второй скачивает, сверяет версии и раскладывает файлы по проекту.

Публичные и приватные реестры

Компании часто держат внутренние библиотеки — общий набор компонентов интерфейса, клиент к своему API — и не хотят выкладывать их в открытый доступ. Для этого есть приватные реестры: GitHub Packages, GitLab Package Registry, самостоятельно развёрнутый Verdaccio. Их же ставят как зеркало-кэш публичного реестра, чтобы сборка не зависела от его доступности. Какой реестр использовать для каких пакетов, указывают в файле .npmrc:

# .npmrc в корне проекта
registry=https://registry.npmjs.org/
@example:registry=https://npm.example.ru/
//npm.example.ru/:_authToken=${NPM_TOKEN}

Пакеты с префиксом @example/ пойдут во внутренний реестр, остальные — в публичный. Токен подставляется из переменной окружения и не хранится в репозитории.

Риски, о которых стоит помнить

  • Похожие имена. Злоумышленники публикуют пакеты с названиями, отличающимися на букву от популярных, в расчёте на опечатку при установке.
  • Подмена зависимости. Если внутренний пакет без префикса случайно запрашивают из публичного реестра, там может оказаться чужой пакет с тем же именем. Префиксы-области и явная настройка реестра закрывают эту дыру.
  • Скрипты установки. Пакет может выполнить свой код прямо при установке. Поэтому новые зависимости проверяют, версии фиксируют lock-файлом, а в автоматической сборке ставят через npm ci.

Такую сборку, которая берёт пакеты из реестра на сервере, обычно запускает система непрерывной интеграции.

Обновлено:

Все термины раздела «Frontend»

Что будем искать? Например,Продвижение