【发布时间】:2019-12-08 06:49:12
【问题描述】:
我在发布到我的私有 Nexus 上托管的私有 npm 注册表时遇到身份验证问题。
我的 Nexus 设置是我有 npm-proxy、npm-registry(使用 allowRepublish=false 托管 npm)、npm-snapshots(使用 allowRepublish=true 托管 npm)和 npm-public(与所有其他三个存储库组合在一起)。
由于我正在开发一个库,我正在使用我的快照存储库,因此我可以不断地重新部署相同的版本(类似于 maven 世界中的快照)。
在我的库项目中,我在 package.json
中设置了此选项"publishConfig": {
"registry": "https://my.nexus.com/repository/npm-snapshots/"
}
接下来,我创建了 .npmrc 文件,其内容如下:
registry=https://my.nexus.com/repository/npm-public/
_auth=RVhBTVBMRQ==
通过此设置,我可以毫无问题地发布项目。但是,困扰我的是,我的密码(只是 base64 编码)存储在文件中,应该提交,但由于其中的凭据,我无法提交。
我尝试登录到 npm 注册表并从 .npmrc 中删除了 auth 行
npm adduser --registry=https://my.nexus.com/repository/npm-snapshots --always-auth
我收到了回复Logged in as myusername on https://my.nexus.com/repository/npm-snapshots.
但是,当我尝试运行 npm publish 时,我得到:
npm ERR! code E401
npm ERR! Unable to authenticate, need: BASIC realm="Sonatype Nexus Repository Manager"
npm verb exit [ 1, true ]
npm timing npm Completed in 6867ms
npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\XXXX\AppData\Roaming\npm-cache\_logs\2019-07-30T19_31_01_598Z-debug.log
现在在我的另一个项目(正在使用这个库)中,我简单地创建了内容为 registry=https://nexus.mjamsek.com/repository/npm-public/ 的 .npmrc 文件并运行命令 npm adduser --registry=https://my.nexus.com/repository/npm-public --always-auth 并且我能够下载已发布的包。
但是,发布仍然无法正常工作,我不知道为什么。
编辑 31.7.2019:在我的活动领域列表中,我还有 npm Bearer Token Realm
【问题讨论】:
-
您需要在传递给“npm adduser”的注册表 URL 的末尾加上一个斜杠,否则 npm 将切断 URL 的最后一段,并且它不起作用。
-
确实是问题所在,谢谢。如果你把它写成答案,我会接受它。