【问题标题】:Not Found - PUT https://npm.pkg.github.com/package-name未找到 - PUT https://npm.pkg.github.com/package-name
【发布时间】:2020-01-16 05:23:26
【问题描述】:

我正在尝试在 GPR(Github 包注册表)上上传一个包。我登录成功:

npm login --registry=https://npm.pkg.github.com

然后运行这些命令:

npm set registry https://npm.pkg.github.com/

npm publish

返回此错误:

npm ERR! 404 Not Found - PUT https://npm.pkg.github.com/package-name
npm ERR! 404 
npm ERR! 404  'package-name@version' is not in the npm registry.

似乎它试图在 npm 注册表而不是 github 包注册表上上传一个包。我该如何解决这个问题?

【问题讨论】:

  • 您的package.json 是什么样的?你在那里指定publishConfig.registry 吗?值得注意的是,在命令行上指定注册表并不会覆盖它。
  • 不,我根本没有在 package.json 中指定 publishConfig 字段

标签: javascript git github github-actions github-package-registry


【解决方案1】:

有两种方法可以解决这个问题:

  1. package.json 中指定publishConfig 选项:
"publishConfig": {
    "registry":"https://npm.pkg.github.com/@OWNER"
},
  1. .npmrc 文件添加到您的项目中,其中包含以下内容:
registry=https://npm.pkg.github.com/@OWNER

OWNER 替换为 GitHub 上拥有您将发布包的存储库的用户或组织帐户的名称。

【讨论】:

  • 问题解决了,但我有新问题``` 405 Method Not Allowed ```
  • 是的,刚刚在package.json中添加了repository的属性,指向你在github的repo。
  • @yussan 你怎么知道405 Method Not Allowed
  • @yussan 我的意思是你是怎么解决的
  • 我也有同样的问题
【解决方案2】:

例如:

{
  "name": "@elvisjs/calling-elvis",
  "repository": {
    "type": "git",
    "url": "https://github.com/elvisjs/calling-elvis"
  },
  "publishConfig": {
    "registry": "https://npm.pkg.github.com/elvisjs"
  }
}

namerepository/urlpublishConfig/registry 必须匹配。

【讨论】:

  • 非常感谢,我试图理解为什么我无法发布几个小时!太奇怪了,为什么我需要一个存储库块来发布???甚至没有收到很好的错误消息,文档中也没有明确的描述。简直是疯了……
  • 您的解决方案也适用于我。但是我需要添加一些东西,不要像我一样混合连字符和分数:)
【解决方案3】:

Github 包注册表期望 package.json 上的名称属性为 "@{github username}/{package name} 例如:-

"name": "@pravanjan/local-time",
"publishConfig": { 
     "registry": "https://npm.pkg.github.com/" 
 },

如果 package.json 中没有设置 "publishConfig" 我们可以直接在终端设置注册表参数

npm publish --registry=https://npm.pkg.github.com/ 

这确实对我有用

【讨论】:

    【解决方案4】:

    正如此处其他答案所暗示的,上述错误的根本原因是 GPR(与 https://www.npmjs.com/ 不同)要求包具有范围。

    但是,似乎所有其他建议的解决方案(更新package.json 等)都不允许在没有范围的情况下继续将包发布到https://www.npmjs.com/。 这是我的解决方案,它允许两者:

    假设:

    1. package.json 包含没有范围的简单包名称,这在将公共包发布到https://www.npmjs.com/ 时经常出现这种情况
    2. GitHub Workflow 使用 GitHub 的 Node.js 包 模板配置

    run: npm ci 默认步骤之前向publish-gpr 作业添加附加步骤,以便将当前存储库的所有者动态插入到package.json 中的包名称中:

    - name: Insert repository owner as scope into package name
      run: |
        node <<EOF
        const fs = require('fs').promises;
        fs.readFile('package.json', 'utf8').then((data) => JSON.parse(data)).then((json) => {
            json.name = '@$(echo "$GITHUB_REPOSITORY" | sed 's/\/.\+//')/' + json.name;
            console.info('Package name changed to %s', json.name);
            return fs.writeFile('package.json', JSON.stringify(json), 'utf8');
        }).catch(error => {
            console.error(error);
            process.exit(1);
        });
        EOF
    

    【讨论】:

      猜你喜欢
      • 2021-07-14
      • 2020-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-14
      • 1970-01-01
      • 2015-04-05
      • 1970-01-01
      相关资源
      最近更新 更多