在使用Nexus HTTPS NPM注册表代理时,我应该如何在.npmrc中设置_auth? [英] How should I set _auth in .npmrc when using a Nexus https npm registry proxy?
问题描述
上下文
我的
.npmrc
文件似乎已正确读取(通过npm config ls -l
从命令行和Maven内部版本检查)。运行
npm
的计算机无法直接连接到网络,它只能连接到Nexus NPM注册表URL。因此,未设置代理属性proxy
和https-proxy
。由于对Nexus的访问受到限制,我从Nexus中生成了访问令牌。
Nexus安全令牌由用户名和密码组成,用户名和密码都包含
/
这样的字符,这些字符通常必须进行"url编码"不出所料,在此配置下,运行
npm install
时未检测到代理。Nexus NPM注册表代理似乎设置正确(在使用生成的令牌连接后,我可以使用Web浏览器访问
json
文件和下载tgz
文件)如果我将
registry
设置为http://registry.npmjs.org/
并注释_auth
、email
、always-auth
、strict-ssl
属性,并添加proxy
和https-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
按预期工作?
到目前为止我已尝试
- base 64Encode(
<username>:<password>
)- 结果
npm info retry will retry, error on last attempt: Error: socket hang up
- 结果
- 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.
- 结果
- 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
负责。
npm
时,所有的`.npmrc`代理设置似乎都会被忽略,而NPM会忽略本地代理排除(对于公司URL)。我会开一张罚单来举报这种奇怪的行为。
这篇关于在使用Nexus HTTPS NPM注册表代理时,我应该如何在.npmrc中设置_auth?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!