【问题标题】:Publishing Github packages for a monorepo as part of an organization作为组织的一部分为 monorepo 发布 Github 包
【发布时间】:2020-04-24 09:17:55
【问题描述】:

我在 Github Enterprise 上有一个 Lerna monorepo,它目前有两个 npm 包,我正试图将它们发布到同一个 repo 下的 Github 包注册表。

作为参考,他们是:

  • github.com/mycompany/package-a
  • github.com/mycompany/package-b

我按照以下说明操作:https://help.github.com/en/github/managing-packages-with-github-packages/configuring-npm-for-use-with-github-packages#publishing-multiple-packages-to-the-same-repository

所以现在我的 2 个 package.json 文件如下所示(为格式化目的而修剪):

"name": "@mycompany/package-a",
"repository": {
    "url": "ssh://git@github.com:mycompany/monorepo.git"
  },
  "publishConfig": {
    "registry": "https://npm.pkg.github.com/"
  },
"name": "@mycompany/package-b",
"repository": {
    "url": "ssh://git@github.com:mycompany/monorepo.git"
  },
  "publishConfig": {
    "registry": "https://npm.pkg.github.com/"
  },

因此,您可以注意到它们都具有与推荐的存储库相同的 URL。

第一个问题:一个是我的公司已经有名为package-apackage-b的repos。看来您不能与 monorepo 中的包和 monorepo 之外的包发生命名冲突。¹

第二个也是更重要的问题: 这似乎根本不适合我。我在各自的 package.json 文件中重命名了包,以避免命名冲突到 package-a-monopackage-b-mono,我真的不想这样做,但我只是想让它工作。尝试在存储库本身内部运行 lerna publishnpm publish 时,我得到 404。就像它实际上并没有尝试读取 repository.url 字段,因为它告诉您修改。

^ 这被证明是暂时的,或者实际上从来都不是问题,只是因为命名冲突。

npm 发布输出:

npm ERR! code E404
npm ERR! 404 Not Found - PUT https://npm.pkg.github.com/@mycompany%2fpackage-a - The expected resource was not found.

lerna 发布输出:

lerna http fetch PUT 404 https://npm.pkg.github.com/mycompany/@mycompany%2fpackage-a 327ms
lerna ERR! E404 The expected resource was not found.

有没有人遇到过这个问题并找到了解决方案?

¹更糟糕的是,由于某种原因,我第一次运行它时,它实际上确实将一个包发布到了 package-a 的 monorepo 中。但从那时起,我收到错误 lerna ERR! E422 Package "package-a" is already associated with another repository. 没有任何改变,我无法将另一个版本发布到同一个 repo。

【问题讨论】:

  • 您在这方面取得了进展吗?

标签: github monorepo github-package-registry


【解决方案1】:

我遇到了同样的问题,我必须生成一个具有更多权限的新个人访问令牌。仅仅read:packageswrite:packages 是不够的,你还需要repo

【讨论】:

  • 你添加了什么权限?
  • 我无法确认。尝试添加具有所有权限的访问令牌,但没有运气......
  • 对我来说,我在重命名我的存储库后忘记更新我的 package.json 中的存储库 url...
  • 对于私有存储库,我遇到了访问令牌问题,只有包读取/创建权限并且还需要添加存储库权限,但我认为这与此特定错误无关。
  • +1 实际上,当您没有 repo 权限时,您确实会得到与错误消息中显示的 github npm URL 完全相同的 404“资源未找到”。非常具有误导性的错误消息。
【解决方案2】:

这里的问题是我们在组织中有与正在发布的包同名的 repos,它不喜欢这样。

当我重新解决这个问题时,我重命名了这些包,以免与组织中的另一个现有 repo 发生冲突,并且它按预期工作。

【讨论】:

  • 这很尴尬。我们有一个名为“utilities”的包,其中包含各种语言的实用程序,其中之一是 node。现在我们必须重命名节点包,使其不仅仅是“@organization/utilities”。
  • 是否有关于该规则的文档?我也遇到了同样的问题。
  • @GN。我最初找不到任何关于它的文档(从那以后我就再也没有看过文档),最终仅根据我的观察和反复试验解决了。
【解决方案3】:

此错误的另一个可能原因(在原始问题正文中讨论并排除)是任何包的 package.json 的存储库字段与 repo 的 git URL 不匹配 - 例如,如果您将 repo 转移到一个不同的组织,或者重命名了 repo,但没有用新的 URL 更新每个包的 package.json

即使问题出在存储库 URL 上,错误消息也会在 https://npm.pkg.github.com/@org/package-name 上报告 404。

(感谢jonas-reif's comment

【讨论】:

  • 您为我节省了几个小时!谢谢!
  • 谢谢!重命名存储库后,我没有意识到我必须更新存储库 URL 字段。这在任何地方都不明显!
  • 非常感谢。我可能没想过要查看注册表并发现错字。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-27
  • 2021-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多