Не удалось опубликовать в реестре НПМ (локальный)

Я запускаю Nexus 3.0.1-01 и использую его для размещения репозиториев Maven и реестров NPM. Для NPM у меня есть локальное зеркало npmjs.org, локальный реестр NPM и группа, которая объединяет два...

enter image description here

Я использую это с npm внутри, где я могу использовать npm-public group как мой реестр, и это работает нормально. Итак, я могу использовать Nexus для зеркалирования npmjs.

Следующий шаг - взять локально написанные модули npm и опубликовать их в npm-выпусках (на моем экземпляре Nexus), чтобы эти модули могли совместно использоваться среди команд доставки. Я смог создать пакет, и, как представляется, npm pack ведет себя.

Я запустил npm adduser, чтобы предоставить мои учетные данные Nexus в моей среде npm. Я использую то же имя пользователя и пароль, которые я использую при входе в веб-приложение Nexus, и моему пользователю назначена роль администратора (поэтому у меня должны быть все разрешения). Я могу видеть учетные данные в моем файле.npmrc

enter image description here

Мой параметр реестра еще НПМ-общественная группа, которая в сочетании с зеркалом и мой локальный реестр. Я убедился, что пакет.json модуля, который я пытаюсь развернуть, имеет раздел "publishConfig", который указывает на URL-адрес локального реестра (а не на публичную группу)

enter image description here

Однако, несмотря на все это, вызов "npm publish" приводит к ошибке 401...

enter image description here

Посмотрев на npm-debug.log, я вижу, что он пытается вызвать вызов HTTP PUT, чтобы вставить собранный файл tgz в реестр, и это возвращает ошибку 401

enter image description here

Я включил ведение журнала отладки в пакете shiro на сервере, но я только вижу единственное сообщение, которое думает, что ему нужна аутентификация

2016-09-13 08:56:28,590+1000 DEBUG [qtp1257823896-4030] *UNKNOWN org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter - Authentication required: sending 401 Authentication challenge response.

Согласно документации, я сделал все, что я должен был сделать (npm добавить пользователя), но я не могу успешно развернуть модуль npm в моем локальном репозитории.

Существуют ли дополнительные опции, которые мне нужно использовать при вызове npm publish? Есть ли дополнительные настройки, которые мне нужно внести в размещенный репозиторий npm на моем сервере, который позволит мне опубликовать его? Я в значительной степени создал его, используя значения по умолчанию. Пропустил ли я шаг, который мешает мне перейти на мой гостевой реестр npm?

Любая помощь будет очень признательна, поскольку я застрял в данный момент.

Ответ 1

Как оказалось, у меня не было Nem Bearer Token Realm в моем списке активных сфер. Как только я переместил его в Active, публикация завершилась успешно!

enter image description here

Ответ 2

В дополнение к ответу @EdH мы обнаружили, что формат.npmrc изменился, поэтому base64 encoded _auth больше не будет работать... и токен должен быть создан путем входа в репо.

старый.npmrc

registry=https://host/repo
_auth=12afdjsljl123213

новый.npmrc

//host/repo/:_authtoken=uuidOfToken

Ответ 3

В дополнение к ответу @Daniel я обнаружил, что при добавлении учетных данных пользователя/регистрации в npm у вас не может быть косой черты в URL-адресе реестра.

Плохо:

npm adduser --registry=https://repo.localhost/repository/npm-internal/

Хорошо:

npm adduser --registry=https://repo/repository/npm-internal

Кроме того, если вы хотите автоматизировать вход в систему (то есть не в интерактивном режиме), я использовал хороший инструмент под названием npm-cli-login.

npm-cli-login -u admin -p admin123 -e [email protected] -r https://repo/repository/npm-internal

Ответ 4

Я понимаю, что этому посту уже пару лет, но после долгих часов борьбы с этим вопросом я наконец нашел то, что сработало для меня, чего я не видел во многих других местах. Проблема заключалась в том, что я не указывал _authToken в файле .npmrc. Добавление этого, как показано ниже, решило проблему, и я смог успешно выполнить команды npm без ошибки 401.

.npmrc

registry=https://test.repo.com/repository/npm-group/
//test.repo.com/repository/npm-group/:_authToken=NpmToken.${NPM_TOKEN}