GitHub Packages中NPM包因version.ID为空无法弃用或撤销发布的问题
问题描述
我们团队在GitHub Packages上有一个NPM包@team/old-eslint-config,近期打算弃用它改用@team/eslint-config-new。但执行弃用命令时:
npm deprecate @team/old-eslint-config@1.0.0 "package is deprecated, use @team/eslint-config-new"
抛出错误:
400 Bad Request - PUT {package_url} - unmarshalling packument failed: version.ID cannot be empty
执行撤销发布命令时:
npm unpublish @team/old-eslint-config@1.0.0
也出现相同错误。用npm view查看包信息,发现其_id字段为空:
{ "_id": "", "name": "@team/old-eslint-config", "dist-tags": { "latest": "1.0.1" } }
正常包(如express)的_id则是完整格式(如express@4.18.2)。
已尝试的操作
- 登录/登出npm账号(已确认权限正常,能发布新版本)
- 发布包的新版本(操作成功,但问题依旧)
- 在package.json中手动添加
id和_id字段后发布新版本,仍无法解决问题
解决方案建议
不要手动设置
_id字段:_id是npm registry(此处为GitHub Packages)自动生成的元数据,手动在package.json里添加不会生效,发布时会被registry覆盖,无需做此操作。尝试通过GitHub UI操作:
- 打开GitHub仓库对应的Packages页面,找到
@team/old-eslint-config包 - 进入具体版本(如1.0.0)的详情页,查看是否有标记为已弃用或删除版本的选项(GitHub Packages的UI支持直接对版本进行弃用或删除操作,可能绕过命令行的元数据问题)
- 打开GitHub仓库对应的Packages页面,找到
联系GitHub支持:如果UI操作也无法解决,说明包的元数据在GitHub Packages侧出现了损坏。这种情况下,用户自身无法修复,需要提交GitHub支持工单,说明包名、版本以及遇到的错误,请求官方帮忙修复元数据(填充缺失的
_id字段),之后再尝试执行弃用或撤销命令。
内容的提问来源于stack exchange,提问作者Yurii
相关产品推荐
相关产品推荐

