node.js - npm 发布因 GitLab 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 文件(以及我一直试图在本地复制的文件)在此npm publish
阶段之前执行此操作before_script
:
- 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:\Python27\python.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
engine
author
{
"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
.
当/如果您使用项目级或组织/组级部署令牌时,它们只需要read_package_registry
和/或write_package_registry
.
推荐阅读
- c# - Word 互操作:如何确定 Word 文档选择是否包含段落标记?
- c# - ASP.NET MVC - 如何运行单独的进程并让用户继续正常的应用程序使用?
- php - 在哪里编写将在 Wordpress 博客的内容和小部件中使用的数组
- flask - 期待 http://127.0.0.1:5000/;但只有“进程以退出代码 0 完成”
- java - 如何调用和解析 postgres 用户定义类型
- node.js - 如何修复随机 Heroku H12 错误代码
- c - 如何在 RB 树中找到最大值
- node.js - 如何将数据库服务与分页和过滤隔离
- python-3.x - 是否可以更新来自其他类的事件的对象?
- mysql - MySQL JOIN 在从多个表中选择时导致“ERROR 1054 (42S22): Unknown column”