NodeJS GitLab NPM注册表的npm发布失败

ht4b089n  于 2023-01-30  发布在  Node.js
关注(0)|答案(3)|浏览(166)

我尝试使用免费GitLab版本中的新NPM注册表。我尝试创建一个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:\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的关键内容(我在本节中省略了contributorsdependenciesdevDependenciesengineauthor):

{
  "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/"
  }
}

我也尝试了几个不同的软件包名称,根据这个官方指南,无济于事。
我觉得我错过了一些非常琐碎的东西,但我被困在这一点上。任何有帮助的指针或想法都很感激。
注意:我已经替换了 all 中提到的端点的FQDN,以防我的雇主对此不满。

3lxsmp7m

3lxsmp7m1#

在这种情况下,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

cbjzeqam

cbjzeqam2#

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

  • 检查package.jsonpublishConfig的设置。如问题所示,格式是@company:registy。起初我误解了,我以为“registry”是它的名字。但它的字面意思是“registry”。

希望对某人有帮助!

fwzugrvs

fwzugrvs3#

希望其他人也能从我刚刚花了半个小时用头撞这个东西中获益。看看你能不能发现其中的区别:

//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忽略 *...你是对的!

相关问题