我正在运行Nexus 3.0.1-01,并使用它来托管Maven存储库和NPM注册表。对于NPM,我有一个npmjs.org的本地镜像,一个本地NPM注册表和一个结合这两者的组...
我一直在内部使用npm,我可以使用npm-public组作为我的注册表,这一直很好。所以,我可以使用Nexus镜像npmjs。
下一步是使用本地编写的npm模块并将它们发布到npm-releases(在我的Nexus实例上),以便这些模块可以在这里的交付团队之间共享。我已经能够构建一个包,并且npm pack似乎表现得很好。
我已经运行了npm adduser来为我的npm环境提供我的Nexus凭据。我使用的是当我登录Nexus网络应用程序时使用的用户名/密码,我的用户被分配了管理员角色(所以我应该拥有所有权限)。我可以在我的.npmrc文件中看到凭据
我的注册表值仍然是npm-public 组,它将镜像和我的本地注册表结合在一起。我已经确保我试图部署的模块的package.json有一个“publishConfig”部分,它指向本地注册表的url(不是公共组)
然而,尽管如此,调用“npm publish”会导致401错误......
查看npm-debug.log,我可以看到它正在尝试调用HTTP PUT调用将已组装的tgz文件推送到注册表,这会返回401错误
我已在服务器中的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注册表的步骤?
任何帮助都会非常感激,因为我现在卡住了。
答案 0 :(得分:86)
答案 1 :(得分:10)
答案 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。