# #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.