无法发布到NPM注册表(本地)

时间:2016-09-12 23:15:23

标签: nexus

我正在运行Nexus 3.0.1-01,并使用它来托管Maven存储库和NPM注册表。对于NPM,我有一个npmjs.org的本地镜像,一个本地NPM注册表和一个结合这两者的组...

enter image description here

我一直在内部使用npm,我可以使用npm-public组作为我的注册表,这一直很好。所以,我可以使用Nexus镜像npmjs。

下一步是使用本地编写的npm模块并将它们发布到npm-releases(在我的Nexus实例上),以便这些模块可以在这里的交付团队之间共享。我已经能够构建一个包,并且npm pack似乎表现得很好。

我已经运行了npm adduser来为我的npm环境提供我的Nexus凭据。我使用的是当我登录Nexus网络应用程序时使用的用户名/密码,我的用户被分配了管理员角色(所以我应该拥有所有权限)。我可以在我的.npmrc文件中看到凭据

enter image description here

我的注册表值仍然是npm-public ,它将镜像和我的本地注册表结合在一起。我已经确保我试图部署的模块的package.json有一个“publishConfig”部分,它指向本地注册表的url(不是公共组)

enter image description here

然而,尽管如此,调用“npm publish”会导致401错误......

enter image description here

查看npm-debug.log,我可以看到它正在尝试调用HTTP PUT调用将已组装的tgz文件推送到注册表,这会返回401错误

enter image description here

我已在服务器中的shiro包上启用了调试日志记录,但我只看到一条消息认为它需要身份验证

2016-09-13 08:56:28,590+1000 DEBUG [qtp1257823896-4030] *UNKNOWN org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter - Authentication required: sending 401 Authentication challenge response.

根据文档,我已经做了我应该做的所有事情(npm添加用户)但是我无法将npm模块成功部署到我的本地存储库。

调用npm publish时是否需要使用其他选项?我需要对我的服务器中的托管npm存储库进行其他设置,以便我可以发布到它吗?我几乎使用默认值创建它。我是否错过了阻止我部署到托管的npm注册表的步骤?

任何帮助都会非常感激,因为我现在卡住了。

5 个答案:

答案 0 :(得分:86)

事实证明,我的主动领域列表中没有Npm Bearer Token Realm。将其移至Active后,发布成功完成!

enter image description here

答案 1 :(得分:10)

另外,对于@ EdH的回答,我们发现.npmrc的格式已经改变,因此base64编码的_auth将不再起作用......并且必须通过登录repo来创建令牌。 旧的.npmrc 注册表= https://开头主机/回购 _auth = 12afdjsljl123213 新的.npmrc //主机/回购/:_ =的authToken uuidOfToken

答案 2 :(得分:3)

除了@ Daniel的回答之外,我发现在adding user credentials/logging into npm时,您无法在注册网址上添加一个斜杠。

<强>为:

npm adduser --registry=https://repo.localhost/repository/npm-internal/

不可

npm adduser --registry=https://repo/repository/npm-internal

此外,如果您希望自动登录(即非交互式),我使用了一个名为npm-cli-login的好工具。

npm-cli-login -u admin -p admin123 -e nick@foo.bar -r https://repo/repository/npm-internal

答案 3 :(得分:1)

我意识到这篇文章已经有几年历史了,但是经过数小时的努力,我终于找到了对我有用的东西,这是我在许多其他地方看不到的。问题是我没有在_authToken文件中指定.npmrc。如下所示添加此文件即可解决此问题,并且我能够成功运行npm命令而不会出现401错误。

.npmrc

registry=https://test.repo.com/repository/npm-group/
//test.repo.com/repository/npm-group/:_authToken=NpmToken.${NPM_TOKEN}

答案 4 :(得分:0)

您可能会收到此错误的另一个原因是,您可能已为“ npm Bearer Token Realm”启用了对服务器的匿名访问。禁用匿名访问后,还必须删除.npmrc并重新添加注册表和adduser。