从 GitHub Packages 添加库时需要指定两次范围

Posted

技术标签:

【中文标题】从 GitHub Packages 添加库时需要指定两次范围【英文标题】:Need to specify scope twice when adding library from GitHub Packages 【发布时间】:2021-12-28 06:21:57 【问题描述】:

在我们的 GitHub 组织中,我们有一个用于内部 Node.js 库的私有存储库。我已经设置了一个 Actions Workflow 来构建一个包并将其发布到 GPR,只要一个版本被剪切和标记。在文档here 之后,我使用我们的组织名称限定了包的范围,并指定了repositorypublishConfig 值。库的package.json 文件类似于:


    "name": "@org-name/lib-name",
    "version": "1.1.1",
    "repository": "git://github.com/org-name/lib-name.git",
    "publishConfig": 
        "registry": "https://npm.pkg.github.com"
    ,

    ...


我在尝试使用 Yarn 将库添加到另一个项目时遇到问题。具体来说,当使用yarn add 命令时,我需要指定两次范围才能找到库,但这也会导致进一步的问题(可能是因为第二个'@'符号应该表示一个版本)。

在消费项目中,我添加了一个 .yarnrc 文件,其中包含以下 GPR 条目:

"@org-name:registry" "https:/npm.pkg.github.com"

如果我随后使用命令yarn add @org-name/lib-name --verbose,我会得到以下信息:

[1/4] ????  Resolving packages...
verbose 0.645526824 Performing "GET" request to "https://npm.pkg.github.com/@org-name%2flib-name".
verbose 1.056449407 Request "https://npm.pkg.github.com/@org-name%2flib-name" finished with status code 401.
verbose 1.066291664 Error: Couldn't find package "@org-name/lib-name" on the "npm" registry.
    at MessageError.ExtendableBuiltin (/usr/local/Cellar/yarn/1.22.15/libexec/lib/cli.js:721:66)
    at new MessageError (/usr/local/Cellar/yarn/1.22.15/libexec/lib/cli.js:750:123)
    at NpmResolver.<anonymous> (/usr/local/Cellar/yarn/1.22.15/libexec/lib/cli.js:50864:15)
    at Generator.next (<anonymous>)
    at step (/usr/local/Cellar/yarn/1.22.15/libexec/lib/cli.js:310:30)
    at /usr/local/Cellar/yarn/1.22.15/libexec/lib/cli.js:321:13
    at processTicksAndRejections (internal/process/task_queues.js:95:5)
error Couldn't find package "@org-name/lib-name" on the "npm" registry.

然而,如果我使用命令yarn add @org-name/@org-name/lib-name,它似乎找到了东西,但仍然无法正常工作:

yarn add v1.22.15
[1/4] ????  Resolving packages...
[2/4] ????  Fetching packages...
[3/4] ????  Linking dependencies...
[4/4] ????  Building fresh packages...
success Saved lockfile.
success Saved 1 new dependency.
info Direct dependencies
└─ @org-name/@1.0.1
info All dependencies
└─ @org-name/@1.0.1

请注意,上面没有引用实际的库名称。这反映了对 package.json 依赖项的更新,如下所示:


  ...
  "dependencies": 
    "@babel/core": "^7.16.0",
    "@org-name/": "org-name/lib-name",
    ...
  ,
  ...

@org-name 文件夹也已添加到 node_modules 下,其内容确实类似于 lib-name 项目。

在这个阶段,我已经阅读并尝试过一遍又一遍地尝试相同的事情而迷失方向。我希望有人能指出我在上面的配置中犯的愚蠢的简单错误。谁能建议我可以从这里尝试的东西?我的期望是简单地使用yarn add @org-name/lib-name 在其他项目中使用该库。

【问题讨论】:

【参考方案1】:

如果这是一个私有包,您可能会丢失一个身份验证令牌。尝试将其添加到您的 .npmrc:

//npm.pkg.github.com/:_authToken=<<YOUR GITHUB PAT>>
@org-name:registry=https://npm.pkg.github.com

【讨论】:

非常感谢,这确实完成了工作!使用这种方法,我可以通过将所需的库添加到使用项目的 package.json 中的依赖项来使其工作(我已经放弃了直接从 CLI 添加)。非常感谢!

以上是关于从 GitHub Packages 添加库时需要指定两次范围的主要内容,如果未能解决你的问题,请参考以下文章

将代码从 Eclipse 提交到 Git 存储库时无法连接到任何 URI 错误

使用 pip 安装私有 github 存储库时遇到问题

无法从 GitHub Actions 从 GitHub Packages 拉取

Ansible github_packages

为github帐号添加SSH keys(Linux和Windows)

Git------应用TortoiseGit为github账号添加SSH keys