作为组织的一部分为 monorepo 发布 Github 包

Publishing Github packages for a monorepo as part of an organization

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

作为参考,他们是:

我遵循了这些说明: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的回购协议。似乎您不能与 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. Nothing changed,我无法将另一个版本发布到同一个 repo。

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

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

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

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

更新每个包的 package.json

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

(归功于