【问题标题】:400 bad request when logging/pushing npm package to nexus?将 npm 包记录/推送到 nexus 时出现 400 错误请求?
【发布时间】:2019-12-20 21:17:53
【问题描述】:

我正在尝试为我的 nodejs 项目使用私有 npm 注册表,并且为此我正在使用 nexus。我保留了admin 用户以供使用,至少用于测试并保证没有权限问题。但是,我不能接受地使用npm login --registry <private-registry-address>npm publish --registry <private-registry-address> 登录。我使用了几种方法,首先我在.npmrc文件中手动添加条目如下:

Nexus 3 文档中提到了这一点:

➜  echo "email=$NPM_EMAIL" > $HOME/.npmrc                                       
➜  echo "_auth=$(echo -n "$NPM_USER:$NPM_PASS" | openssl base64)" >> $HOME/.npmrc
➜  echo "always-auth=true" >> $HOME/.npmrc

然后我尝试使用npm publish --registry http://172.17.0.1:8081/repository/npmtest/ 发布,但它只是给了我:

npm ERR! code E400
npm ERR! 400 Bad Request - PUT http://172.17.0.1:8081/repository/npmtest/mypackage

这是 npm docs 中的官方:

在这里,我使用以下凭据登录 repo:

➜  npm login --registry http://172.17.0.1:8081/repository/npmtest/

并输入我的登录凭据:

Username: admin
Password: 
Email: (this IS public) admin@example.org

但不幸的是,它给了我同样的错误:

npm ERR! code E400
npm ERR! 400 Bad Request - PUT http://localhost:8081/repository/npmtest/-/user/org.couchdb.user:admin

我在 Nexus 中添加了npm Bearer Token Realm,正如我在许多讨论中看到的那样,它也没有任何作用。

我尝试使用另一个 repo verdaccio 并且它工作正常,这就是为什么我很确定这是一个关系问题。

注意:我正在使用所有 repo 管理器(Nexus 和 verdaccio)作为 docker 容器,无论如何这应该不是问题。

我正在运行npm 版本6.10

这里有什么解决方案可以让 nexus 工作?

【问题讨论】:

  • 您运行的是哪个版本的npm?包版本是否已经部署,现在阻止您重新发布?
  • @jcragun 6.10 是 npm 版本。回购中没有任何内容。

标签: node.js docker npm nexus


【解决方案1】:

{
  ...,
  "publishConfig": {
    "registry": "<linkToNexusRepo>"
  }
}

通过在我的package.json 中添加此片段来为我解决问题。

【讨论】:

    【解决方案2】:

    确保您为存储库选择了正确的格式和类型。就我而言,我不小心创建了格式不正确的 npm 存储库。

    我创建了一个Format: nuget 而不是Format: npm

    您可以在 Nexus 仪表板中选择存储库时看到格式。

    【讨论】:

      【解决方案3】:

      请确保,我们必须在两个地方保持相同的 npmrc 代码行

      • $HOME/.npmrc

      • 项目.npmrc 在根级别

        registry=http://172.17.0.1:8081/repository/npmtest/mypackage/npm/registry/
        
        always-auth=true
        
        ; begin auth token // remove in the case of $HOME/.npmrc
        //repository/npmtest/mypackage/npm/registry/:username=****
        //repository/npmtest/mypackage/npm/registry/:_password=${NPM_TOKEN}
        //repository/npmtest/mypackage/npm/registry/:email=*****
        //repository/npmtest/mypackage/npm/:username=****
        //repository/npmtest/mypackage/npm/:_password=${NPM_TOKEN}
        //repository/npmtest/mypackage/npm/:email=*****
        
        ; end auth token // remove in the case of $HOME/.npmrc
        

      它肯定会起作用;)

      【讨论】:

        【解决方案4】:

        您应该在命令中明确选择您的本地注册表,或者执行如下一次性配置:

        npm config set registry http://localhost:port
        

        不使用上述命令的显式注册示例:

        npm adduser --registry http://localhost:port
        

        【讨论】:

          猜你喜欢
          • 2017-11-03
          • 1970-01-01
          • 2016-01-06
          • 2018-02-01
          • 1970-01-01
          • 2016-12-08
          • 2012-08-06
          • 1970-01-01
          • 2011-01-10
          相关资源
          最近更新 更多