Это адаптированный контент из видео Vienna.js, Введение в Verdaccio, январь 2019 года. Для получения дополнительной информации см. раздел «Что такое Verdaccio? | Verdaccio
Verdaccio — это частный и легкий реестр прокси npm для пакетов NodeJs.
-
Конфигурация очень проста и выполняется локально через файл config.yaml, и позволяет изменять поведение по умолчанию, активировать плагины и внешние функции.
-
Он совместим со всеми менеджерами пакетов, такими как npm, yarn или pnpm.
-
Все публикуемые вами пакеты являются приватными и доступны только на основе вашей конфигурации.
-
Он кэширует все зависимости по требованию и ускоряет установку в локальных или частных сетях.
Реестр NPM
Реестр NPM — это коллекция публично зарегистрированных пакетов NodeJS, используемых разработчиками back-end и front-end. Эти пакеты можно загрузить и установить с помощью менеджеров пакетов, таких как: npm (npm Inc), yarn (Facebook, Google, Exponent, Tidle), pnpm (Zoltan Kochan). Независимо от того, какой менеджер мы используем для установки пакетов Node, они будут делать одно и то же: запросы к реестру NPM.
Когда мы устанавливаем пакет, мы ожидаем получить только один пакет, верно? Но правда в том, что когда мы устанавливаем пакет, мы получаем гораздо больше пакетов, чем ожидали.
В контексте javascript количество опубликованных пакетов превышает 100 тысяч и растет с каждым днем. Кори Хаус, эксперт по React и JavaScript, опубликовал в своем Twitter следующее заявление: «[…] в настоящее время 97% кода веб-приложений поступает из npm. Только 3% кода написано вами».
Другими словами, мы полностью зависим от реестра NPM и должны относиться к этому серьезно, поскольку этот реестр может дать сбой — как это уже произошло в августе 2018 года, когда сотрудник npm Inc случайно удалил некоторые пакеты.
Мы можем перечислить другие проблемы, которые могут возникнуть при использовании npm, например: задержки и проблемы с подключением, цены и безопасность вне нашего контроля, а также автономная разработка, которая имеет ряд ограничений.
Offline
Npm создает кэш, но не позволяет вам поделиться им (если вы не создадите прокси-запись); он не позволяет вам использовать некоторые команды CLI, такие как publish и info; изолированные рабочие области строгой политикой безопасности в некоторых компаниях, где необходимо обращаться в операционную команду за разрешениями.
Подключение
Медленное интернет-соединение снижает скорость загрузки. Некоторые пакеты могут быть повреждены из-за блокировки брандмауэра (например, в Китае), или интернет-планы очень ограничены (в России могут взимать 60 евро за отправку только 1 письма).
Безопасность
Доверяйте свой код сторонним компаниям; конфиденциальные данные могут попасть в npm.
Решение Вердаччо
Наличие журналов необходимо для масштабирования новых проектов, но частные источники — дорогая привилегия для небольших групп или стартапов. Verdaccio — это доступное решение всех проблем, которые мы видели до сих пор.
Его установка очень проста, просто установите его глобально, выполнив: npm install -global verdaccio@latest
, и запустите его CLI командой verdaccio
. Его также можно использовать с docker. Некоторые особенности Вердаччо:
Частная регистрация
Мы можем пользоваться всеми преимуществами и контролем реестра npm, не выставляя свой код на всеобщее обозрение, потому что все делается локально. Кроме того, если вы хотите использовать модифицированную версию какого-либо стороннего пакета, вы можете опубликовать свою версию локально с тем же именем.
Прокси / Uplinks
Клиентские инструменты работают только с одной записью за раз, но мы можем связать все записи с ресурсом npm scope (~/.npmrc), как показано в примере ниже:
registry=https://registry.npmjs.org
@mycompany:registry=http://verdaccio-domain:4873
Однако этот способ сложен в обслуживании и несколько небезопасен, поскольку после случайной публикации на github токены могут попасть в открытый доступ.
Verdaccio — это приложение прокси-сервера npm, которое действует как посредник между клиентом и запросом ресурса с сервера npm.
Если вы используете несколько журналов в своей организации и вам необходимо получать пакеты из нескольких источников в одном проекте, Verdaccio позволяет вам объединить несколько журналов и получать пакеты из одной конечной точки.
Uplinks — это функция Verdacio для объединения нескольких записей. Пакет может быть получен несколькими записями в качестве запасного варианта, если одна из них не работает, у вас есть другая.
Кэш-пакет
Cache состоит из кучи зависимостей, организованных по именам. Зависимость, состоит из файла метаданных с пачкой tarballs, который представляет собой бинарную версию пакета. Кэш подстрахует вас в случае сбоя соединения с реестром или при полном отключении от сети.
Для хранения verdaccio используется файловая система, но вы можете использовать что-то другое, если вам нужно масштабирование, например, использовать Amazon s3 bucket для использования verdaccio в облаке.
Кэширование важно, особенно для непрерывной интеграции (CI), поскольку вы хотите избежать сбоев из-за внешних проблем. С помощью кэширования мы можем экономить пропускную способность и сокращать внешний трафик, особенно когда мы запускаем CI в облаке, ведь каждый мегабайт стоит денег.
Verdaccio очень рекомендуется использовать между сервером сборки и внешним протоколированием.
В нем есть плагины
С verdaccio можно использовать бесплатные плагины, например, плагины аутентификации (gitlab, LDAP), плагины хранения данных (AWS, GCP), а поскольку это приложение nodejs express, вы можете добавлять свои конечные точки или перехватывать запросы с помощью плагинов промежуточного ПО (npm audit).
Веб-интерфейс пользователя
Мы можем искать и просматривать частные пакеты и проверять все метаданные, которые предлагает пакет: регламент, автор, последние версии, зависимости и т.д.
Тесты E2E
Если вы используете monorepo, рекомендуется тестировать все пакеты перед их публикацией.
Как установить и настроить verdaccio
Установите вердаччо в глобальном масштабе:
$ yarn global add verdaccio
Запустите verdaccio
для создания файла конфигурации по умолчанию config.yaml
:
$ verdaccio
Откройте config.yaml в VSCode:
$ code ~/.config/verdaccio/config.yaml
Добавьте github в uplinks
, и включите свой личный токен доступа в auth.token:
uplinks:
npmjs:
url: https://registry.npmjs.org/
github:
url: https://npm.pkg.github.com/
auth:
type: bearer
token: <GITHUB_PERSONAL_TOKEN>
Добавьте пакеты, которые вы хотите запускать локально, в пакеты:
packages:
'@belezanaweb/*':
access: $all
publish: $authenticated
unpublish: $authenticated
proxy: github
🙌🏼 Готово! Вердаччо настроен для использования!