Настройка локального реестра NPM для частных пакетов.

В этом посте мы узнаем о настройке реестра NPM для локальной разработки. Мы также можем использовать этот реестр для публикации частных пакетов. Большинство организаций и ведущих предприятий обычно предпочитают иметь свой собственный реестр NPM для хранения собственного частного кода javascript и могут семимверять его, как и любой пакет npm.

Что такое реестр НПМ?

Реестр NPM - это база данных пакетов javascript, которые включают программное обеспечение и его метаданные, а также могут иметь версии, аналогичные Git. Наиболее распространенный реестр, который используют разработчики и организации с открытым исходным кодом во всем мире, - это общедоступный реестр NPM, но это не единственный реестр, который у нас есть.

Частный реестр NPM - Bit.dev как пример того, что возможно

Самым популярным частным реестром NPM для фронтенд-разработчиков (IMHO) является Bit.dev (на самом деле это комбинация трех вещей: частный реестр NPM, сайт документации и инструмент командной строки для публикации компонентов).

Bit.dev позволяет вам решить, хотите ли вы сделать свои пакеты (компоненты интерфейса) доступными для всех или только для тех, у кого есть необходимые разрешения.

Он также позволяет вам выбирать между использованием NPM или Yarn для установки компонентов или (и это изящная часть) использования собственного инструмента CLI для импорта компонентов. Когда вы импортируете компонент, вы как бы клонируете его в свой репозиторий, чтобы вы могли изменить его исходный код и опубликовать его обратно с измененной версией.

Этот «союз» между частным реестром и сайтом документации позволяет командам разработчиков легко находить и повторно использовать компоненты в репозиториях.

В этой статье мы будем использовать verdaccio для настройки локального реестра NPM. Verdaccio - это облегченный реестр частных прокси-серверов NPM с открытым исходным кодом с активным сообществом с открытым исходным кодом.

Почему мы выбираем Вердаччо?

Мы можем использовать другие реестры npm, но мы выбираем verdaccio по следующим причинам:

  1. Открытый исходный код: это легкий реестр npm с открытым исходным кодом, в котором активно участвует сообщество разработчиков.
  2. Веб-интерфейс. Он имеет элегантный и простой веб-интерфейс, аналогичный общедоступному реестру NPM. Также есть тёмный режим.
  3. Аутентификация: он предлагает встроенный плагин аутентификации, и мы также можем расширить тип аутентификации с помощью плагинов.
  4. Поддержка подключаемых модулей: он поддерживает подключаемые модули и предоставляет широкий спектр подключаемых модулей для аутентификации, хранения, промежуточного программного обеспечения и многого другого. Мы также можем создавать собственные плагины в соответствии с нашими требованиями. В этом красота Вердаччо.
  5. Восходящие ссылки: он поддерживает ссылки на несколько серверных ВМ. Здесь мы имеем в виду реестр. Мы можем добавить столько реестров, сколько захотим, даже если он поддерживает частный реестр NPM с auth.
  6. Доступ к пакету. Это своего рода уровень авторизации, который обеспечивает разрешающий и ограничивающий доступ к пакетам и пакетам с ограниченными областями, обычно зависит от подключаемого модуля авторизации.
  7. Масштабируемость: мы можем легко масштабировать его с помощью подключаемых модулей. Он также поддерживает Docker и Kubernetes, что упрощает развертывание и масштабирование.

Установка Verdaccio с помощью Docker

Есть много способов установить verdaccio локально. Поскольку он поддерживает Docker, мы будем использовать Docker для установки verdaccio в нашей локальной системе. С помощью Docker мы можем изолировать его от нашей локальной среды и других зависимостей. Убедитесь, что у вас установлен и запущен Docker на вашем локальном компьютере.

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

Создайте новый отдельный каталог и сохраните указанную выше конфигурацию в conf/config.yaml файле.

mkdir verdaccio && cd verdaccio
mkdir conf
# Create a new file and save the above configuration
touch conf/config.yaml

Давайте создадим каталоги storage и plugins, которые мы смонтируем как том докера.

mkdir storage
mkdir plugins

Со всеми этими вещами наша структура каталогов будет похожа на -

./verdaccio
├── conf
│   └── config.yaml
├── plugins
└── storage

Давайте настроим наш собственный реестр NPM, просто выполнив команду Docker -

docker run -it --detach \
    --publish 4873:4873 \
    --volume `pwd`/conf:/verdaccio/conf \
    --volume `pwd`/storage:/verdaccio/storage \
    --volume `pwd`/plugins:/verdaccio/plugins \
    --name verdaccio \
    verdaccio/verdaccio

Verdaccio по умолчанию работает на 4873 порту, поэтому мы опубликовали тот же порт на нашем хост-компьютере, но поскольку он работает внутри докера, мы можем опубликовать любой порт на нашем локальном компьютере, если он не привязан к какому-либо другому приложению. Более того, мы можем изменить порт прослушивания verdaccio, передав переменную окружения VERDACCIO_PORT=<DESIRED_PORT>.

Давайте проверим, запущен ли наш док-контейнер -

docker ps

Результат будет примерно таким:

Потрясающие!!! Наш локальный реестр NPM запущен и работает, поэтому давайте откроем его в браузере по адресуlocalhost:4873 и опубликуем на нем фиктивный пакет npm.

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

В конфигурации Verdaccio по умолчанию используется htpasswd плагин аутентификации, но мы можем использовать и другие плагины, такие как LDAP, Bitbucket, Gitlab, GitHub и многие другие.

Давайте создадим нового пользователя, выполнив следующие команды -

npm adduser --registry http://localhost:4873

Вам будет предложено ввести имя пользователя, пароль и общедоступный адрес электронной почты. Давайте войдем в пользовательский интерфейс с теми же учетными данными, которые мы предоставили здесь. Давайте опубликуем фиктивный пакет NPM в нашем локальном реестре.

Публикация пакета NPM

В том же каталоге verdaccio давайте создадим еще один каталог с именем helloworld -

mkdir helloworld
cd helloworld

Давайте посмотрим на package.json проекта -

{
  "name": "@mypackage/helloworld",
  "version": "1.0.0",
  "description": "helloworld dummy project",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "Ankit Jain",
  "license": "ISC"
}

Давайте опубликуем это как scoped пакет с именем @mypackage/helloworld, выполнив следующую команду -

npm publish --registry http://localhost:4873

Мы можем увидеть результат, как показано ниже -

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

Окончательная структура каталогов после публикации нашего пакета -

./verdaccio
├── conf
│   ├── config.yaml
│   └── htpasswd
├── helloworld
│   └── package.json
├── plugins
└── storage
    └── @mypackage
        └── helloworld
            ├── helloworld-1.0.0.tgz
            └── package.json

Заключение

В этой статье мы узнали о локальной настройке реестра NPM и о том, почему мы выбрали для него Verdaccio. В моей предыдущей статье Установка частных пакетов NPM в CI / CD с помощью GitHub Actions я объяснил, как мы можем использовать наш частный / локальный реестр для установки пакетов с помощью файла конфигурации .npmrc и как мы можем используйте наш локальный / собственный реестр NPM с конвейерами CI / CD. Аналогичным образом мы можем развернуть этот реестр NPM в производственной среде, используя обратный прокси-сервер Nginx с SSL.

Не стесняйтесь комментировать и спрашивать меня о чем угодно. Вы можете подписаться на меня в Twitter и Medium. Спасибо за прочтение! 👍

Учить больше