在使用Nexus HTTPS NPM注册表代理时,我应该如何在.npmrc中设置_auth? [英] How should I set _auth in .npmrc when using a Nexus https npm registry proxy?

查看:17
本文介绍了在使用Nexus HTTPS NPM注册表代理时,我应该如何在.npmrc中设置_auth?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

上下文

  1. 我的.npmrc文件似乎已正确读取(通过npm config ls -l从命令行和Maven内部版本检查)。

  2. 运行npm的计算机无法直接连接到网络,它只能连接到Nexus NPM注册表URL。因此,未设置代理属性proxyhttps-proxy

  3. 由于对Nexus的访问受到限制,我从Nexus中生成了访问令牌。

  4. Nexus安全令牌由用户名和密码组成,用户名和密码都包含/这样的字符,这些字符通常必须进行"url编码"

  5. 不出所料,在此配置下,运行npm install时未检测到代理。

  6. Nexus NPM注册表代理似乎设置正确(在使用生成的令牌连接后,我可以使用Web浏览器访问json文件和下载tgz文件)

  7. 如果我将registry设置为http://registry.npmjs.org/并注释_authemailalways-authstrict-ssl属性,并添加proxyhttps-proxy配置,npm install可以正常工作(但我无法在目标环境上执行)

.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

问题

我应该如何正确生成_auth属性才能使npm install按预期工作?

到目前为止我已尝试

  1. base 64Encode(<username>:<password>)
    • 结果npm info retry will retry, error on last attempt: Error: socket hang up
  2. base 64Encode(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>ui	arget
ode
ode_modules
pm
ode_modules
pm-registry-clientlibauthify.js:17:14)
npm sill fetchPackageMetaData     at CachingRegistryClient.makeRequest (<root>ui	arget
ode
ode_modules
pm
ode_modules
pm-registry-clientlib
equest.js:103:17)
npm sill fetchPackageMetaData     at <root>ui	arget
ode
ode_modules
pm
ode_modules
pm-registry-clientlib
equest.js:66:17
npm sill fetchPackageMetaData     at RetryOperation._fn (<root>ui	arget
ode
ode_modules
pm
ode_modules
pm-registry-clientlibattempt.js:18:5)
npm sill fetchPackageMetaData     at null._onTimeout (<root>ui	arget
ode
ode_modules
pm
ode_modules
etrylib
etry_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	arget
ode
ode_modules
pm
ode_modules
pm-registry-clientlibauthify.js:17:14)
npm verb install     at CachingRegistryClient.makeRequest (<root>ui	arget
ode
ode_modules
pm
ode_modules
pm-registry-clientlib
equest.js:103:17)
npm verb install     at <root>ui	arget
ode
ode_modules
pm
ode_modules
pm-registry-clientlib
equest.js:66:17
npm verb install     at RetryOperation._fn (<root>ui	arget
ode
ode_modules
pm
ode_modules
pm-registry-clientlibattempt.js:18:5)
npm verb install     at null._onTimeout (<root>ui	arget
ode
ode_modules
pm
ode_modules
etrylib
etry_operation.js:49:10)
npm verb install     at Timer.listOnTimeout (timers.js:92:15)

提前谢谢。

推荐答案

在查看registry-client代码后,我找到了答案,如下所示。我把它贴出来,因为它可能会对其他人有帮助:

base64Encode(<username>:<password>)

顺便说一句,有一个URL编码,但它由authify.js负责。

我面临的"套接字挂起"问题是由于这样一个事实:如果在Windows配置中设置了代理,则当从CLI(而不是从Maven版本)启动npm时,所有的`.npmrc`代理设置似乎都会被忽略,而NPM会忽略本地代理排除(对于公司URL)。我会开一张罚单来举报这种奇怪的行为。

这篇关于在使用Nexus HTTPS NPM注册表代理时,我应该如何在.npmrc中设置_auth?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆