作为组织的一部分为 monorepo 发布 Github 包
Publishing Github packages for a monorepo as part of an organization
我在 Github Enterprise 上有一个 Lerna monorepo,它目前有两个 npm 包,我正试图将它们发布到同一 repo 下的 Github 包注册表。
作为参考,他们是:
- github.com/mycompany/package-a
- github.com/mycompany/package-b
所以现在我的 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-a
和package-b
的回购协议。似乎您不能与 monorepo 中的包和 monorepo 外的包发生命名冲突。¹
第二个也是更重要的问题: 这对我来说似乎根本不起作用。我在各自的 package.json
文件中重命名了包以避免与 package-a-mono
和 package-b-mono
的命名冲突,我真的不想这样做,但我只是想让它工作.当我尝试在回购协议中 运行 lerna publish
或 npm 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:packages
和 write:packages
是不够的,您还需要 repo
.
这里的问题是我们在组织中有与正在发布的包同名的回购协议,它不喜欢那样。
当我回过头来解决这个问题时,我重命名了这些包,以免与组织中的另一个现有存储库发生冲突,并且它按预期工作。
此错误的另一个可能原因(在原始问题正文中讨论并排除)是,如果任何包的 package.json
的存储库字段与 git URL 不匹配回购 - 例如,如果您将回购转移到不同的组织,或重命名回购,但没有用新的 URL.
更新每个包的 package.json
错误消息将在 https://npm.pkg.github.com/@org/package-name
上报告 404,即使问题出在存储库 URL。
(归功于 )
我在 Github Enterprise 上有一个 Lerna monorepo,它目前有两个 npm 包,我正试图将它们发布到同一 repo 下的 Github 包注册表。
作为参考,他们是:
- github.com/mycompany/package-a
- github.com/mycompany/package-b
所以现在我的 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-a
和package-b
的回购协议。似乎您不能与 monorepo 中的包和 monorepo 外的包发生命名冲突。¹
第二个也是更重要的问题: 这对我来说似乎根本不起作用。我在各自的 package.json
文件中重命名了包以避免与 package-a-mono
和 package-b-mono
的命名冲突,我真的不想这样做,但我只是想让它工作.当我尝试在回购协议中 运行 lerna publish
或 npm 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:packages
和 write:packages
是不够的,您还需要 repo
.
这里的问题是我们在组织中有与正在发布的包同名的回购协议,它不喜欢那样。
当我回过头来解决这个问题时,我重命名了这些包,以免与组织中的另一个现有存储库发生冲突,并且它按预期工作。
此错误的另一个可能原因(在原始问题正文中讨论并排除)是,如果任何包的 package.json
的存储库字段与 git URL 不匹配回购 - 例如,如果您将回购转移到不同的组织,或重命名回购,但没有用新的 URL.
package.json
错误消息将在 https://npm.pkg.github.com/@org/package-name
上报告 404,即使问题出在存储库 URL。
(归功于