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

EdH*_*EdH 41 nexus

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

在此输入图像描述

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

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

我已经运行了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.
Run Code Online (Sandbox Code Playgroud)

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

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

任何帮助将不胜感激,因为我现在卡住了.

EdH*_*EdH 95

事实证明,我的活跃领域列表中没有Npm Bearer Token Realm.一旦我将其移动到Active,发布成功完成!

在此输入图像描述

  • 作为解决方案的摘要:启用Npm Bearer Token Realm和`"publishConfig":{"registry":"https:// your-nexus-host/nexus/repository/npm-private /"} npm config set registry https://your-nexus-host/nexus/repository/npm-group/npm adduser --registry = https:// your-nexus-host/nexus/repository/npm-private /(提供nexux-user-name,nexux-user -password,nexux-user-email)npm publish .` (3认同)

小智 10

另外,对于@ EdH的回答,我们发现.npmrc的格式已经改变,因此base64编码的_auth将不再起作用......并且必须通过登录repo来创建令牌.

旧的.npmrc

registry=https://host/repo
_auth=12afdjsljl123213
Run Code Online (Sandbox Code Playgroud)

新的.npmrc

//host/repo/:_authtoken=uuidOfToken
Run Code Online (Sandbox Code Playgroud)

  • 注意:当你通过 `npm login` 登录后,npm 会在你的 *global* `~/.npmrc` 文件中添加一个条目。在那里您可以找到 base64 编码的令牌,您可以将其复制到本地 .npmrc 或在 CI 管道中生成它。 (2认同)

Nic*_*aly 5

除了@Daniel的答案外,我发现在添加用户凭据/登录npm时,注册表URL上不能带有斜线。

坏:

npm adduser --registry=https://repo.localhost/repository/npm-internal/
Run Code Online (Sandbox Code Playgroud)

好:

npm adduser --registry=https://repo/repository/npm-internal
Run Code Online (Sandbox Code Playgroud)

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

npm-cli-login -u admin -p admin123 -e nick@foo.bar -r https://repo/repository/npm-internal
Run Code Online (Sandbox Code Playgroud)

  • 请注意,在最新版本的npm中,为了使用基本身份验证登录Nexus,您需要在“ npm adduser”命令中添加“ --auth-type-legacy”参数。 (2认同)