npm publish发布GitLab私有npm包时返回PUT 404错误
GitLab npm 包发布 404 问题排查解决
从报错日志能看到,你实际发起发布请求的地址是实例级接口https://gitlab.com/api/v4/packages/npm/@bytap%2freuicom,并没有命中你配置的项目级发布地址,按以下顺序逐一排查修复即可:
- 修复
package.json中publishConfig的配置错误。你当前配置的键名@bytap/registry是无效写法,npm 无法识别该配置,才会 fallback 到.npmrc中配置的全局 scope 地址。正确配置如下:
"name": "@bytap/reuicom", "publishConfig": { "registry": "https://gitlab.com/api/v4/projects/37004905/packages/npm/" }
- 修复
.npmrc的格式错误。你给鉴权配置行加了多余的单引号,会导致 npm 无法解析${GITLAB_AUTH_TOKEN}环境变量,鉴权失败时 GitLab 会统一返回 404 而非 403(防止接口探测)。正确配置如下:
@bytap:registry=https://gitlab.com/api/v4/packages/npm/ //gitlab.com/api/v4/packages/npm/:_authToken="${GITLAB_AUTH_TOKEN}" //gitlab.com/api/v4/projects/37004905/packages/npm/:_authToken="${GITLAB_AUTH_TOKEN}"
- 校验 Deploy Token 权限。你使用的 Deploy Token 必须同时勾选
read_package_registry、write_package_registry两个权限范围;如果是群组级生成的 token,需要确认该 token 对reuicom项目有包读写权限,不要使用仅具备读权限的 token 发布。 - 校验 GitLab 项目包配置。进入 ID 为 37004905的
reuicom项目,打开「设置 > 包与镜像 > 包注册表」,确认 npm 包发布权限没有做额外限制,且@bytap/reuicom包名没有和群组下其他已存在的包重名。 - 配置修改完成后先执行
npm cache clean --force清理本地缓存,在项目目录下执行npm config get registry确认生效的 registry 地址为你配置的项目级地址,再重新执行发布命令即可。
注意:GitLab npm 注册表分为实例级、群组级、项目级三个独立维度,不同维度的接口路径不通用。带 scope 的包如果要发布到指定项目,必须通过
publishConfig显式指定项目级 registry,直接调用实例级接口时,GitLab 无法定位包要归属的具体项目,会直接返回404。
内容的提问来源于stack exchange,提问作者Saunish Sheth
相关产品推荐
相关产品推荐

