从Github软件包注册表安装私有软件包失败,未找到/未授权

时间:2019-10-23 11:57:49

标签: npm yarn install.packages github-package-registry

我创建并发布了一个私有的Github软件包。首先尝试用纱线安装它,我遇到以下问题:

我是否尝试使用yarn或npm,尽管遵循了Github(https://help.github.com/en/github/managing-packages-with-github-package-registry/configuring-npm-for-use-with-github-package-registry)记录的确切步骤,但根本找不到包。

我的.yarnrc

registry "https://npm.pkg.github.com/OWNER"

对于纱线,它会不断尝试在https://registry.yarnpkg.com/@GITHUB_USERNAME处寻找包裹,而不是我在上面输入的注册表。

备注:.yarnrc中的注册表需要以略有不同的语法添加:

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

到目前为止,我也开始尝试混合使用.npmrc.yarnrc的配置,但是没有运气。

-

编辑(已部分解决)

我想出了如何实际使用npm或(在我的情况下)yarn来访问软件包的方法。现在,我遇到了Request failed \"401 Unauthorized\"错误的问题,尽管我在.yarnrc的顶部添加了凭据:

//npm.pkg.github.com/:_authToken=AUTH_TOKEN

.npmrc中执行相同操作也不起作用。

3 个答案:

答案 0 :(得分:6)

不幸的是,我发现该解决方案在任何地方都没有得到很好的记录,而是混合了多种资源,而且非常简单。

无论您使用的是npm还是yarn,都只需放置以下.npmrc(纱线也将包含此内容):

registry=https://registry.yarnpkg.com/

@GITHUB_USERNAME:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_authToken=AUTH_TOKEN
always-auth=true

一些评论:

  • always-auth是必需的,至少在使用纱线时(尚未使用npm进行测试)
  • .yarnrc中添加上述内容无效。需要身份验证时,毛线会以某种方式出现问题。
  • 现在,您可以使用yarn add @GITHUB_USERNAME/PACKAGE_NAME或等效的npm轻松安装私有软件包。
  • 包括registry=https://registry.yarnpkg.com/代表纱线或registry=https://registry.npmjs.org/代表npm

我希望这种解决方案也适用于您的情况。否则,请让我知道您面临的问题,并且很高兴与您分享有关该主题的一些研究以及解决方案的隐患。

答案 1 :(得分:1)

您需要做的是指定在哪里检索EACH软件包,并在您的.npmrc中添加类似的内容(我不知道yarn语法,但是当它读取.npmrc时,它可以与yarn一起工作):

//registry.npmjs.org/:_authToken=<token-npm-read>
//npm.pkg.github.com/:_authToken=<token-github-package-read>
@foo:registry=https://npm.pkg.github.com
@far:registry=https://registry.npmjs.org

然后,Yarn将在Github中搜索@ foo / mypackage1,其中将在npmjs中搜索@ far / mypackage2。不管您将其设置为什么,默认注册表都会保留给其他注册表。

答案 2 :(得分:1)

我在这里添加一个答案是因为经过一天在这里和其他地方尝试不同解决方案的变化之后,我发现我的问题是另外一回事。

我的问题是,尽管npm在程序包名称方面不区分大小写,但在认证方面,yarn ! ?‍♂️

因此,使用上面accepted solution中的示例:

registry=https://registry.yarnpkg.com/

@GITHUB_USERNAME:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_authToken=AUTH_TOKEN
always-auth=true

我需要确保两件事:

  1. @GITHUB_USERNAME 需要 以匹配您在github上看到的情况以及发布该软件包的名称。也就是说,如果您的用户名是Pickle-Rick,则需要输入@Pickle-Rick:registry=https://npm.pkg.github.com,而不是@pickle-rick@Pickle-rick

  2. 您需要在package.jsonyarn add命令(无论使用哪种)中匹配此大小写。例如:

    "@Pickle-Rick/schwifty": "^1.0.0"package.jsonyarn add @Pickle-Rick/schwifty中。

我通过深入研究yarn github issues找到了这个解决方案。