我在Github Enterprise上有一个Lerna monorepo,目前有两个npm软件包,我正尝试将它们发布到同一仓库下的Github软件包注册表中。
作为参考,他们是:
所以现在我的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.
,但没有任何变化,因此我无法将另一个版本发布到相同的仓库中。
答案 0 :(得分:3)
这里的问题是我们在组织中有一个与要发布的软件包同名的存储库,但它不是那样的。
当我回过头来解决此问题时,我将软件包重命名为与组织中的另一个现有存储库没有冲突,并且按预期工作。
答案 1 :(得分:2)
我遇到了同样的问题,我必须生成一个具有更多特权的新个人访问令牌。仅read:packages
和write:packages
是不够的,您还需要repo
。
答案 2 :(得分:1)
此错误的另一个可能原因(在原始问题正文中讨论和排除)是,如果任何软件包的package.json
的存储库字段与存储库的git URL不匹配-例如,如果您传输了存储库到另一个组织,或重命名存储库,但没有使用新的URL更新每个软件包的package.json
。
即使问题出在存储库URL上,错误消息也会在https://npm.pkg.github.com/@org/package-name
上报告404。