我有一个私有 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 会安装它。
.npmrc
文件中取出 authToken ?如果您使用的是 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”中。
我也无法用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。
我尝试了很多方法,包括这篇文章中提到的所有方法,但没有任何效果。 现在,我不知道为什么,但以下对我有用:
匿名:
@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
的网址,但我认为关键是添加未真正记录的中间行。
我可以使用 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