Не удалось установить правильную конфигурацию npm для реестра групп

# #npm #gitlab #.npmrc

Вопрос:

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

Чтобы установить пакет с частной областью действия, в документе говорится:

 # Set URL for your scoped packages.
# For example package with name `@foo/bar` will use this URL for download
npm config set @foo:registry https://gitlab.example.com/api/v4/projects/<your_project_id>/packages/npm/
 

Так что мой .npmrc выглядел как

 @mygroup:registry=https://gitlab.com/api/v4/projects/<id-project-1>/packages/npm/
//gitlab.com/api/v4/projects/<id-project-1>/packages/npm/:_authToken=<token>
//gitlab.com/api/v4/projects/<id-project-2>/packages/npm/:_authToken=<token>
//gitlab.com/api/v4/packages/npm/:_authToken=<token>
 

Очевидно, что для первого пакета все работает нормально, но не для второго.

Чего я не могу понять, так это почему пакет с областью действия должен ссылаться на уникальный URL-адрес проекта?

Из-за этого я не могу установить оба своих пакета: URL-адрес моих пакетов с областью действия будет действителен только для одного из них.

Я посмотрел на конечную точку api, чтобы вернуть список пакетов моей группы, которые я нашел: https://docs.gitlab.com/ee/api/packages.html#within-a-group

Поэтому я обновил свой .npmrc до

 @mygroup:registry=https://gitlab.com/api/v4/groups/mygroup/packages/npm/
//gitlab.com/api/v4/projects/<id-project-1>/packages/npm/:_authToken=<token>
//gitlab.com/api/v4/projects/<id-project-2>/packages/npm/:_authToken=<token>
//gitlab.com/api/v4/packages/npm/:_authToken=<token>
 

Но это не работает.
На group/group-id/packages маршруте я получаю только информацию gitlab, но ничего в формате, удобном для npm.

Как установить более одного частного пакета npm с областью действия, размещенного в одной группе?

Ответ №1:

Конечная точка уровня экземпляра, по-видимому, соответствует вашей ситуации на уровне экземпляра-npm-конечная точка

С помощью:

 npm config set @mygroup:registry https://gitlab.example.com/api/v4/packages/npm/
npm config set -- '//gitlab.example.com/api/v4/packages/npm/:_authToken' "<your_token>"
 

Вы должны иметь возможность публиковать @mygroup/project1 amp; @mygroup/project2

Комментарии:

1. Я совершенно пропустил это, спасибо!

Ответ №2:

У меня возникли некоторые проблемы с использованием yarn ( 1.22.10 ), поэтому я опубликую более подробную информацию здесь, чтобы сэкономить пару часов любому, кто это читает.

По каким-то неизвестным причинам я смог установить пакет с помощью npm, но не с помощью yarn, и я получил Request failed "404 Not Found"

В итоге я создал .npmrc файл в корне проекта (я работаю с docker) со следующим содержимым:

 @my-org:registry=https://gitlab.com/api/v4/packages/npm/
//gitlab.com/api/v4/packages/npm/:_authToken=<GITLAB_TOKEN_API_SCOPE>
//gitlab.com/api/v4/projects/<ID_PROJECT_1>/packages/npm/:_authToken=<GITLAB_TOKEN_API_SCOPE>
//gitlab.com/api/v4/projects/<ID_PROJECT_2>/packages/npm/:_authToken=<GITLAB_TOKEN_API_SCOPE>
 

Строки 3 и 4 необходимы для yarn , но не для npm .

Чтобы это сработало, замените @my-org название вашей организации gitlab, gitlab.com URL-адрес, где находятся ваши проекты, <ID_PROJECT_X> идентификаторы проектов, которые вы хотите установить, и <GITLAB_TOKEN_API_SCOPE> личный токен с областью действия API.