Как мне установить auth.npmrc при использовании прокси-сервера реестра Nexus https npm?

контекст

  1. мой .npmrc файл кажется правильно прочитанным (проверено с помощью npm config ls -l как из командной строки, так и из сборки Maven).

  2. машина, на которой npm не удается подключиться непосредственно к сети, он может подключаться только к URL-адресу реестра Nexus npm. Поэтому свойства прокси proxy и https-proxy не установлены.

  3. поскольку доступ к Nexus ограничен, я сгенерировал маркер доступа из Nexus.

  4. маркеры безопасности Nexus сделаны из имени пользователя и пароля, которые содержат такие символы, как / которые обычно должны быть "url закодированы"

  5. как и ожидалось, с этой конфигурацией, при запуске npm install не обнаруживает прокси.

  6. Nexus npm registry proxy, кажется, правильно установлен (я могу получить доступ к json файлы и скачать tgz файлы с использованием интернета браузер после подключения с помощью сгенерированного токена)

  7. если я поставил registry to http://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 работать, как ожидалось?

я пытался до сих пор

  1. base64Encode(<username>:<password>)
    • результаты npm info retry will retry, error on last attempt: Error: socket hang up
  2. 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.
  3. 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 ответов



посмотрев на 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.

может быть, это помогает.