npmrc npm nexus npm-install

¿Cómo debo configurar_auth en.npmrc cuando utilizo un proxy de registro Nexus https npm?



nexus 3 npm proxy (4)

Contexto

  1. Mi archivo .npmrc parece estar correctamente leído (verificado con npm config ls -l desde la línea de comandos y desde la compilación de Maven).

  2. 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 del proxy y el proxy https-proxy no están configuradas.

  3. Como el acceso a Nexus está restringido, he generado un token de acceso desde Nexus.

  4. 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"

  5. como se esperaba, con esta configuración, cuando se ejecuta npm install no detecta proxy.

  6. El proxy de registro de Nexus npm parece estar configurado correctamente (puedo acceder a los archivos json y descargar archivos tgz usando un navegador web después de haber conectado usando el token generado)

  7. Si configuro el registry en http://registry.npmjs.org/ y comentario _auth , email , propiedades always-auth , strict-ssl , y agrego la configuración proxy y https-proxy , la npm 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

  1. Código base64 ( <username>:<password> )
    • los resultados en el npm info retry will retry, error on last attempt: Error: socket hang up
  2. 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.
  3. Base64Encode (urlencode ( <username> ) : urlencode ( <password> ))
    • los resultados en el npm info retry will retry, error on last attempt: Error: socket hang up

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.



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.