¿Cómo debo configurar_auth en.npmrc cuando utilizo un proxy de registro Nexus https npm?
nexus 3 npm proxy (4)
Contexto
Mi archivo
.npmrc
parece estar correctamente leído (verificado connpm config ls -l
desde la línea de comandos y desde la compilación de Maven).la máquina en la que se ejecuta
npm
no puede conectarse directamente a la red, solo puede conectarse a una URL de registro de Nexus npm. Por lo tanto, las propiedades delproxy
y elproxy
https-proxy
no están configuradas.Como el acceso a Nexus está restringido, he generado un token de acceso desde Nexus.
Los tokens de seguridad Nexus están hechos de un nombre de usuario y una contraseña que contienen caracteres como
/
que generalmente tienen que estar "codificados en url"como se esperaba, con esta configuración, cuando se ejecuta
npm install
no detecta proxy.El proxy de registro de Nexus npm parece estar configurado correctamente (puedo acceder a los archivos
json
y descargar archivostgz
usando un navegador web después de haber conectado usando el token generado)Si configuro el
registry
enhttp://registry.npmjs.org/
y comentario_auth
,email
, propiedadesalways-auth
,strict-ssl
, y agrego la configuraciónproxy
yhttps-proxy
, lanpm install
funciona como se esperaba (pero no lo haré). ser capaz de hacerlo en el entorno de destino)
Contenido del archivo .npmrc
; 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
Pregunta
¿Cómo debo generar la propiedad _auth
correctamente para que npm install
funcione como se esperaba?
Lo intenté hasta ahora
- Código base64 (
<username>:<password>
)- los resultados en el
npm info retry will retry, error on last attempt: Error: socket hang up
- los resultados en el
- Base64Encode (urlencode (
<username>:<password>
))- los resultados en el
npm info retry will retry, error on last attempt: Error: This request requires auth credentials. Run `npm login` and repeat the request.
npm info retry will retry, error on last attempt: Error: This request requires auth credentials. Run `npm login` and repeat the request.
- los resultados en el
- Base64Encode (urlencode (
<username>
):
urlencode (<password>
))- los resultados en el
npm info retry will retry, error on last attempt: Error: socket hang up
- los resultados en el
Al obtener el error de socket hang up
el socket hang up
, tengo el siguiente seguimiento de pila:
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)
Cuando This request requires auth credentials
error This request requires auth credentials
, tengo el siguiente seguimiento de pila:
npm sill fetchPackageMetaData Error: This request requires auth credentials. Run `npm login` and repeat the request.
npm sill fetchPackageMetaData at CachingRegistryClient.authify (<root>/ui/target/node/node_modules/npm/node_modules/npm-registry-client/lib/authify.js:17:14)
npm sill fetchPackageMetaData at CachingRegistryClient.makeRequest (<root>/ui/target/node/node_modules/npm/node_modules/npm-registry-client/lib/request.js:103:17)
npm sill fetchPackageMetaData at <root>/ui/target/node/node_modules/npm/node_modules/npm-registry-client/lib/request.js:66:17
npm sill fetchPackageMetaData at RetryOperation._fn (<root>/ui/target/node/node_modules/npm/node_modules/npm-registry-client/lib/attempt.js:18:5)
npm sill fetchPackageMetaData at null._onTimeout (<root>/ui/target/node/node_modules/npm/node_modules/retry/lib/retry_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>/ui/target/node/node_modules/npm/node_modules/npm-registry-client/lib/authify.js:17:14)
npm verb install at CachingRegistryClient.makeRequest (<root>/ui/target/node/node_modules/npm/node_modules/npm-registry-client/lib/request.js:103:17)
npm verb install at <root>/ui/target/node/node_modules/npm/node_modules/npm-registry-client/lib/request.js:66:17
npm verb install at RetryOperation._fn (<root>/ui/target/node/node_modules/npm/node_modules/npm-registry-client/lib/attempt.js:18:5)
npm verb install at null._onTimeout (<root>/ui/target/node/node_modules/npm/node_modules/retry/lib/retry_operation.js:49:10)
npm verb install at Timer.listOnTimeout (timers.js:92:15)
Gracias por adelantado.
Acabo de escribir un contenedor que almacena las credenciales en el llavero de su sistema y las proporciona sobre la marcha. Echa un vistazo a: https://github.com/Xiphe/npm_keychain_auth
Después de haber mirado el código de registry-client
encontré la respuesta, aquí está. Lo publico ya que puede ayudar a otras personas:
base64Encode(<username>:<password>)
Por cierto, hay una codificación de URL, pero es authify.js
que se encarga de ello.
El problema de "colgar el zócalo" al que me enfrento se debe al hecho de que si un proxy está configurado en la configuración de Windows, al iniciar npm
desde CLI (y no desde una compilación de Maven), todas las configuraciones de proxy `` .npmrc`` parecen se ignorarán mientras npm omite las exclusiones de proxy nativo (para direcciones URL corporativas). Abriré un ticket para reportar este extraño comportamiento.
No sé acerca de Nexus, pero usamos artifactory como un repo de npm, y allí puedo crear mi token de autenticación llamando a base64encode(username:encryptedPassword)
con encryptedPassword
como la que recibo de mi perfil personal de artefactos.
Tal vez esto ayude.
https://books.sonatype.com/nexus-book/reference/npm-deploying-packages.html
$ echo -n ''username:password'' | openssl base64