使用自定义npm registry执行npm install时出现E404错误,排查无效求原因
你遇到的这个npm ERR! code E404错误,在使用自定义npm registry的场景下,常见成因主要有这几个,结合你已经试过换Node版本、清node_modules的操作,咱们可以排除环境依赖的基础问题,重点看下面这些:
自定义registry中不存在目标包
这是最直接的原因:你要安装的@XXXX是带scope的包,要么它根本没被上传到你当前使用的私有registry里,要么上传时scope名称写错了——要知道npm对scope的大小写是严格敏感的,比如@XXXX和@xxxx会被当成两个完全不同的包。Scope与registry的映射配置错误
如果你是给不同的scope配置了不同的registry(比如部分包走私有、部分走公共npm),可能@XXXX这个scope的映射配错了。可以用命令npm config get @XXXX:registry检查一下,看看它指向的是不是正确的registry地址——比如你本来想让这个scope走公共npm,但配置成了私有registry,那自然找不到。私有registry的权限伪装成404
有些私有registry会把“权限不足”的请求伪装成404错误返回。你可以先确认自己是否有权限访问@XXXX这个包,用npm whoami --registry=你的私有registry地址检查登录状态,看看当前账号有没有该包的读取权限。npm缓存残留的旧信息
你清理了node_modules,但可能没清理npm的全局缓存。缓存里可能存了旧的registry地址或包版本信息,导致请求到错误的位置。试试执行npm cache clean --force清空缓存,之后再重新运行npm install。指定的包版本不存在
如果你的package.json里给@XXXX指定了具体版本号,但这个版本并没有上传到自定义registry里,也会触发404错误。可以去私有registry的包页面确认一下,是否存在你要安装的那个版本。
内容的提问来源于stack exchange,提问作者Brad Parks

