Как мне установить auth.npmrc при использовании прокси-сервера реестра Nexus https npm?
контекст
мой
.npmrc
файл кажется правильно прочитанным (проверено с помощьюnpm config ls -l
как из командной строки, так и из сборки Maven).машина, на которой
npm
не удается подключиться непосредственно к сети, он может подключаться только к URL-адресу реестра Nexus npm. Поэтому свойства проксиproxy
иhttps-proxy
не установлены.поскольку доступ к Nexus ограничен, я сгенерировал маркер доступа из Nexus.
маркеры безопасности Nexus сделаны из имени пользователя и пароля, которые содержат такие символы, как
/
которые обычно должны быть "url закодированы"как и ожидалось, с этой конфигурацией, при запуске
npm install
не обнаруживает прокси.Nexus npm registry proxy, кажется, правильно установлен (я могу получить доступ к
json
файлы и скачатьtgz
файлы с использованием интернета браузер после подключения с помощью сгенерированного токена)если я поставил
registry
tohttp://registry.npmjs.org/
и комментарий_auth
,email
,always-auth
,strict-ssl
свойства, и добавитьproxy
иhttps-proxy
конфигурацииnpm install
работает так, как ожидалось (но я не смогу сделать это в целевой среде)
контент
; Nexus proxy registry pointing to http://registry.npmjs.org/
registry = https://<host>/nexus/content/repositories/npmjs-registry/
; base64 encoded authentication token
_auth = <see question below>
; required by Nexus
email = <valid email>
; force auth to be used for GET requests
always-auth = true
; we don't want to put certificates in .npmrc
strict-ssl = false
loglevel = silly
вопрос
как я должен создать _auth
свойство должным образом, чтобы иметь npm install
работать, как ожидалось?
я пытался до сих пор
- base64Encode(
<username>:<password>
)- результаты
npm info retry will retry, error on last attempt: Error: socket hang up
- результаты
- base64Encode (urlencode (
<username>:<password>
))- результаты
npm info retry will retry, error on last attempt: Error: This request requires auth credentials. Run `npm login` and repeat the request.
- результаты
- base64Encode (urlencode (
<username>
):
urlencode (<password>
))- результаты в
npm info retry will retry, error on last attempt: Error: socket hang up
- результаты в
при получении socket hang up
ошибка у меня есть следующая трассировка стека:
http request GET https://<host>/nexus/content/repositories/npmjs-registry/fsevents
sill fetchPackageMetaData Error: socket hang up
sill fetchPackageMetaData at TLSSocket.onHangUp (_tls_wrap.js:1035:19)
sill fetchPackageMetaData at TLSSocket.g (events.js:260:16)
sill fetchPackageMetaData at emitNone (events.js:72:20)
sill fetchPackageMetaData at TLSSocket.emit (events.js:166:7)
sill fetchPackageMetaData at endReadableNT (_stream_readable.js:905:12)
sill fetchPackageMetaData at doNTCallback2 (node.js:441:9)
sill fetchPackageMetaData at process._tickCallback (node.js:355:17)
sill fetchPackageMetaData error for fsevents@^1.0.0 { [Error: socket hang up] code: 'ECONNRESET' }
WARN install Couldn't install optional dependency: socket hang up
verb install Error: socket hang up
verb install at TLSSocket.onHangUp (_tls_wrap.js:1035:19)
verb install at TLSSocket.g (events.js:260:16)
verb install at emitNone (events.js:72:20)
verb install at TLSSocket.emit (events.js:166:7)
verb install at endReadableNT (_stream_readable.js:905:12)
verb install at doNTCallback2 (node.js:441:9)
verb install at process._tickCallback (node.js:355:17)
при получении This request requires auth credentials
ошибка у меня есть следующая трассировка стека:
npm sill fetchPackageMetaData Error: This request requires auth credentials. Run `npm login` and repeat the request.
npm sill fetchPackageMetaData at CachingRegistryClient.authify (<root>uitargetnodenode_modulesnpmnode_modulesnpm-registry-clientlibauthify.js:17:14)
npm sill fetchPackageMetaData at CachingRegistryClient.makeRequest (<root>uitargetnodenode_modulesnpmnode_modulesnpm-registry-clientlibrequest.js:103:17)
npm sill fetchPackageMetaData at <root>uitargetnodenode_modulesnpmnode_modulesnpm-registry-clientlibrequest.js:66:17
npm sill fetchPackageMetaData at RetryOperation._fn (<root>uitargetnodenode_modulesnpmnode_modulesnpm-registry-clientlibattempt.js:18:5)
npm sill fetchPackageMetaData at null._onTimeout (<root>uitargetnodenode_modulesnpmnode_modulesretrylibretry_operation.js:49:10)
npm sill fetchPackageMetaData at Timer.listOnTimeout (timers.js:92:15)
npm sill fetchPackageMetaData error for fsevents@^1.0.0 [Error: This request requires auth credentials. Run `npm login` and repeat the request.]
npm WARN install Couldn't install optional dependency: This request requires auth credentials. Run `npm login` and repeat the request.
npm verb install Error: This request requires auth credentials. Run `npm login` and repeat the request.
npm verb install at CachingRegistryClient.authify (<root>uitargetnodenode_modulesnpmnode_modulesnpm-registry-clientlibauthify.js:17:14)
npm verb install at CachingRegistryClient.makeRequest (<root>uitargetnodenode_modulesnpmnode_modulesnpm-registry-clientlibrequest.js:103:17)
npm verb install at <root>uitargetnodenode_modulesnpmnode_modulesnpm-registry-clientlibrequest.js:66:17
npm verb install at RetryOperation._fn (<root>uitargetnodenode_modulesnpmnode_modulesnpm-registry-clientlibattempt.js:18:5)
npm verb install at null._onTimeout (<root>uitargetnodenode_modulesnpmnode_modulesretrylibretry_operation.js:49:10)
npm verb install at Timer.listOnTimeout (timers.js:92:15)
спасибо заранее.
3 ответов
https://books.sonatype.com/nexus-book/reference/npm-deploying-packages.html
$ echo -n 'username:password' | openssl base64
посмотрев на registry-client
код я нашел ответ, вот он. Я публикую его, как это может помочь другим людям:
base64Encode(<username>:<password>)
кстати, есть кодировка URL, но это authify.js
это позаботится об этом.
проблема "socket hang up", с которой я сталкиваюсь, связана с тем, что если прокси установлен в конфигурации Windows, при запуске npm
из CLI (а не из сборки Maven) все ``.npmrc` параметры прокси-сервера, кажется, быть проигнорированы, в то время как родной прокси-исключений (для корпоративные URL-адреса) игнорируются npm. Я открою билет, чтобы сообщить об этом странном поведении.
Я не знаю о Nexus, но мы используем artifactory как РЕПО npm, и там я могу создать свой токен аутентификации, вызвав base64encode(username:encryptedPassword)
с encryptedPassword
будучи тем, что я получаю от моего личного профиля artifactory.
может быть, это помогает.