上下文
我的.npmrc
文件似乎已被正确读取(从命令行和Maven构建中使用npm config ls -l
进行检查)。
运行npm
的计算机无法直接连接到网络,它只能连接到Nexus npm注册表网址。因此,未设置代理属性proxy
和https-proxy
。
由于对Nexus的访问受到限制,我已在Nexus中生成了访问令牌。
Nexus安全令牌由用户名和密码组成,两者都包含/
等字符,通常必须是" url编码"
正如预期的那样,使用此配置时,运行时npm install
检测不到代理。
Nexus npm注册表代理似乎已正确设置(我可以访问json
文件并使用生成的令牌连接后使用Web浏览器下载tgz
文件。
如果我将registry
设置为http://registry.npmjs.org/
并评论_auth
,email
,always-auth
,strict-ssl
属性,并添加{ {1}}和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
)
<username>:<password>
npm info retry will retry, error on last attempt: Error: socket hang up
))
<username>:<password>
npm info retry will retry, error on last attempt: Error: This request requires auth credentials. Run `npm login` and repeat the request.
)<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
提前致谢。
答案 0 :(得分:21)
https://books.sonatype.com/nexus-book/reference/npm-deploying-packages.html
$ echo -n 'username:password' | openssl base64
答案 1 :(得分:4)
在查看registry-client
代码后,我找到了答案,就在这里。我发布它可能会帮助其他人:
base64Encode(<username>:<password>)
顺便说一下,有一个URL编码,但它是authify.js
来处理它。
我遇到的“套接字挂断”问题是由于如果在Windows配置中设置代理,从CLI(而不是从Maven构建)启动npm
时,所有``` .npmrc``代理设置似乎被忽略,而本机代理排除(对于公司URL)被npm忽略。我会打开一张机票报告这种奇怪的行为。
答案 2 :(得分:2)
如果您具有授权令牌,则不应使用username:password。 我建议你:
生成令牌
npm config list
npm login --registry=https://nexus.whatever.registry/respository/npm-whatever-group/
//nexus.whatever.registry/respository/npm-whatever-group/:_authToken=NpmToken.YOUR-LOVELY-TOKEN-IN-HEX
//nexus.whatever.registry/respository/npm-whatever-group/:_authToken=NpmToken.YOUR-LOVELY-TOKEN-IN-HEX
email = <EMAIL_USED_FOR_TOKEN_GENERATION>
always-auth = true
registry = https://nexus.whatever.registry/respository/npm-whatever-group/
如果您在身份验证/证书方面遇到问题:
对于CI / CD管道(例如gitlabs或jenikins):
${RELEVANT_ENV_VARIABLES}
替换.npmrc项目文件中的实际值。这样,您将使它们不那么明显,并且始终会根据管路的变化进行自我更新。希望获得帮助。
答案 3 :(得分:1)
我不知道Nexus,但是我们使用artifactory作为npm repo,在那里我可以通过调用base64encode(username:encryptedPassword)
来创建我的身份验证令牌,encryptedPassword
是我从我得到的那个个人神器配置文件。
也许这有帮助。
答案 4 :(得分:0)
我刚刚写了一个包装程序,将凭据存储在您的系统钥匙串中,并即时提供它们。检出:https://github.com/Xiphe/npm_keychain_auth
答案 5 :(得分:0)
Before you run npm login, please follow the instructions below :
1) Create an ~/.npmrc file with the following contents:
registry=https://example.com/repository/npm-group/
email=username@example.com
always-auth=true
//example.com/repository/npm-group/:_authToken=
2) run `npm login`
# npm login
Username: firstname.lastname
Password:
Email: (this IS public) firstname.lastname@example.com
Logged in as firstname,lastname on https://example.com/repository/npm-group/.
Use the same password you use to login to example.com