使用 Yarn 从 Gitlab 安装私有包

问题描述 投票:0回答:4

我有一个私有 npm 包,它使用 Gitlab CI 管道发布到 Gitlab 包注册表。

我想使用 yarn 在项目中安装这个包。

遵循文档帮助我提出了以下

.npmrc
文件:

//gitlab.com/api/v4/packages/npm/:_authToken=glpat-***********
@my-org:registry=https://gitlab.com/api/v4/packages/npm/

有了上面的内容,

npm install @my-org/my-package
就可以完美工作了。 然而,
yarn add @my-org/my-package
失败了。使用
--verbose
显示 404 :

verbose 1.169823875 Error: https://gitlab.com/api/v4/projects/<my-project-id>/packages/npm/@my-org/my-package/-/@my-org/my-package-1.0.3.tgz: Request failed "404 Not Found"


error An unexpected error occurred: "https://gitlab.com/api/v4/projects/<my-project-id>/packages/npm/@my-org/my-package/-/@my-org/my-package-1.0.3.tgz: Request failed \"404 Not Found\""

该软件包在 1.0.3 版本中确实存在,NPM 会安装它。

  • 我需要让它与 Yarn 一起工作。我该怎么做?
  • 此外,有没有办法从
    .npmrc
    文件中取出 authToken ?
gitlab yarnpkg npm-package npm-private-modules
4个回答
1
投票

如果您使用的是 Yarn v1.x,则

.npmrc
中的配置应该有效,因为 Yarn 1 使用此文件中配置的注册表。

但是,对于 Yarn 2,您必须在项目级别的

.yarnc.yml
中配置私有注册表:

npmScopes:
  my-org:
    npmRegistryServer: "https://gitlab.com/api/v4/projects/my-project-id/packages/npm/"
    npmAlwaysAuth: true
    npmAuthToken: glpat-*******

my-org
替换为您的包的范围,将 my-project-id 替换为您的 Gitlab 项目的数字 ID,并将您的令牌置于范围“api”中。


0
投票

我也无法用yarn安装它,但npm没问题。

这解决了:

npm config set -- //gitlab.com/api/v4/packages/npm/:_authToken=XXX

npm config set -- //gitlab.com/api/v4/projects/<projectID>/packages/npm/:_authToken=XXX

npm config set @my-scope:registry https://gitlab.com/api/v4/packages/npm/  

yarn config set '//gitlab.com/api/v4/projects/:_authToken' "XXX"

yarn config set '//gitlab.com/api/v4/packages/npm/:_authToken' "XXX"

此设置不需要 .npmrc。

这是有关该问题的官方 GitLab docs


0
投票

我尝试了很多方法,包括这篇文章中提到的所有方法,但没有任何效果。 现在,我不知道为什么,但以下对我有用:

匿名:

@XXXXX:registry=https://gitlab.com/api/v4/packages/npm/
//gitlab.com/api/v4/projects/:_authToken=XXXXX
//gitlab.com/api/v4/packages/npm/:_authToken=XXXXX

摘要:

@<my-org>:registry=https://gitlab.com/api/v4/packages/npm/
//<gitlab-url>/api/v4/projects/:_authToken=<auth-token>
//<gitlab-url>/api/v4/packages/npm/:_authToken=<auth-token>

我的身份验证令牌位于我的主 gitlab 组中,仅拥有

read package repository
的权利。
两个软件包都位于该软件包下方的不同组中。

按照文档,您会得到带有

project/<id>/npm
packages/npm
的网址,但我认为关键是添加未真正记录的中间行。


0
投票

我可以使用 Yarn 2 而不是 Yarn 1 来运行它。 升级到 Yarn 2 后,它的工作方式如 gitlab 文档

中所述
# check version
yarn --version

# if still at 1.* run upgrade
yarn set version berry

现在以下 .yarnrc.yml 可以工作了

npmScopes:
  my-org:
    npmRegistryServer: "https://gitlab.com/api/v4/packages/npm/"

npmRegistries:
  //gitlab.com/api/v4/packages/npm:
    npmAlwaysAuth: true
    npmAuthToken: my-auth-token
© www.soinside.com 2019 - 2024. All rights reserved.