Nexus实例迁移后NPM任务出现依赖404错误,求排查方案
问题描述
我正在将旧环境的Nexus实例迁移至新环境:旧实例为部署在AWS不再支持的Ubuntu 16.04.7 LTS上的Sonatype Nexus Repository Manager - OSS 3.22.0-02,目标是迁移到Amazon Linux系统的新实例(版本计划使用相同或最新版)。
已完成新实例搭建,并通过rsync同步了整个sonatype-work目录,但将任务指向新迁移实例时出现依赖错误——尽管报错提及的包已存在于Nexus中,但其内部依赖仍被标记为缺失。某NPM任务的报错示例如下:
npm ERR! code E404 npm ERR! 404 Not Found - GET https://***URL**/repository/npm-group/@sideway%2faddress npm ERR! 404 npm ERR! 404 '@sideway/address@^4.1.3' 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 It was specified as a dependency of 'joi' npm ERR! 404 npm ERR! 404 Note that you can also install from a npm ERR! 404 tarball, folder, http url, or git url. npm ERR! A complete log of this run can be found in:
解决步骤
刷新NPM仓库元数据
登录新Nexus后台,找到对应的NPM仓库(包括npm-group及其成员仓库),进入「Browse」页面后点击右上角的「Repair」按钮,选择「Rebuild repository metadata」。如果是代理仓库,额外触发「Fetch index」操作,确保远程元数据同步完整。检查仓库组成员配置
确认npm-group仓库组已包含所有必要的成员仓库(比如存储@sideway/address的宿主仓库、代理公共NPM源的仓库),且成员仓库顺序正确——Nexus会按顺序查找包,建议将私有包仓库排在前面,或确保代理仓库能正常访问公共源。修复文件权限
rsync同步后,检查新实例上sonatype-work目录的所有者和权限,需确保Nexus运行用户(通常为nexus)拥有读写权限:chown -R nexus:nexus /path/to/sonatype-work chmod -R 755 /path/to/sonatype-work执行后重启Nexus服务。
验证版本兼容性(若升级了Nexus)
若新实例使用了比3.22.0-02更新的版本,尽管官方声明sonatype-work目录兼容,但仍需查阅版本变更日志,确认是否存在NPM仓库元数据格式变更,必要时按照官方文档执行升级后的迁移步骤。清除本地NPM缓存
在执行任务的机器上清除本地缓存,避免旧地址缓存导致问题:npm cache clean --force之后重新执行
npm install测试。
内容的提问来源于stack exchange,提问作者Pavan

