在GitLab的npm注册表中 npm发布失败



我尝试使用新的NPM注册表,它现在是免费GitLab版本的一部分。我正在尝试创建一个NPM包并将其发布在我们公司的GitLab实例上。当试图运行npm publish时,进程退出并显示错误:

npm ERR! code E404
npm ERR! 404 Not Found - PUT https://gitlab.myemployer.com/api/v4/projects/1873/packages/npm/@sqt-klu%2fodysseus-nn-core
npm ERR! 404
npm ERR! 404  '@sqt-klu/odysseus-nn-core@0.0.1' is not in the npm registry.
npm ERR! 404 You should bug the author to publish it (or use the name yourself!)
npm ERR! 404
npm ERR! 404 Note that you can also install from a
npm ERR! 404 tarball, folder, http url, or git url.

当通过GitLab CI/CD以及通过本地命令行运行时,会出现此问题。

作为参考,我们内部的GitLab的URL是gitlab.myemployer.com/sqt-klu/odysseus/nn-core。因此,我假设@sqt-klu是GitLab想要的作用域。

CI/CD文件(以及我一直试图在本地复制的内容)在before_script阶段的npm publish之前执行此操作:

- npm config set @sqt-klu:registry https://gitlab.myemployer.com/api/v4/projects/${CI_PROJECT_ID}/packages/npm/
- npm config set https://gitlab.myemployer.com/api/v4/projects/${CI_PROJECT_ID}/packages/npm/:_authToken ${CI_JOB_TOKEN}

在本地,我的用户级npmrc如下(实际令牌被删除,但它是一个已分配所有可能范围的个人访问令牌):

audit-level=high
python=c:Python27python.exe
https://gitlab.myemployer.com/api/v4/projects/1873/packages/npm/:_authToken=redacted
@sqt-klu:registry=https://gitlab.myemployer.com/api/v4/projects/1873/packages/npm/

如果它是相关的,以下是package.json的关键内容(我在这个节选中省略了contributors,dependencies,devDependencies,engineauthor):

{
"name": "@sqt-klu/odysseus-nn-core",
"version": "0.0.1",
"license": "UNLICENSED",
"publishConfig": {
"@sqt-klu:registry":"https://gitlab.myemployer.com/api/v4/projects/1873/packages/npm/"
}
}

我也按照这个官方指南尝试了几个不同的包名,但无济于事。

我觉得我错过了一些非常微不足道的东西,但我被困在这个。如有任何有用的建议或建议,我们将不胜感激。

注意:我已经替换了中所有提到的端点的FQDN,以防我的雇主对此生气。

在这种情况下,404错误可能是指凭据问题,这可能令人困惑。

你应该替换

https://gitlab.myemployer.com/api/v4/projects/${CI_PROJECT_ID}/packages/npm/:_authToken

:

//gitlab.myemployer.com/api/v4/projects/${CI_PROJECT_ID}/packages/npm/:_authToken

所有其他设置看起来正常*并且应该工作。默认情况下,Gitlab项目应该启用包存储库特性。您可以在项目设置中启用/禁用它。


*您可以将您的个人访问令牌的范围减少到仅api.
当/如果您使用项目级或org/group级部署令牌时,它们只需要read_package_registry和/或write_package_registry

在我的案例中,我有一个类似的问题,这个问题帮助我理解了这个问题。

  • 检查package.jsonpublishConfig设置。如问题所示,格式为@company:registy。起初我不明白,我想"注册"。是指它的名字。但它的字面意思是"注册表"。

希望对大家有所帮助!

希望其他人能从我花了半个小时的时间来思考这个问题中受益。看看是否能发现差异:

//your_domain_name/api/v4/projects/your_project_id/packages/npm/:_authToken "${NPM_TOKEN}"
//your_domain_name/api/v4/projects/your_project_id/packages/npm/:_authToken="${NPM_TOKEN}"

如果你猜第二行可以让你成功发布包,而第一行完全被NPM忽略了…你是对的!

最新更新