执行npm adduser添加私有仓库用户时遭遇404 Not Found错误
刚看到你尝试给私有npm registry添加用户时碰到了404问题——执行npm adduser --registry=http://my-registry:8081,输入用户名rjohns、密码和邮箱rjohns@email.com后,触发了npm ERR! code E404和npm ERR! 404 Not Found错误,日志路径是/Users/rjohns/.npm/_logs/2018-02-09T23_30_02_911Z-debug.log。我来帮你梳理几个常见的排查和修复方向:
先确认私有Registry的地址是否正确
首先得验证http://my-registry:8081这个地址能不能正常访问:可以直接在浏览器打开这个地址,或者用curl http://my-registry:8081测试响应。如果本身就返回404,那大概率是域名拼写错了、端口号不对,或者registry服务根本没在这个地址运行。另外,有些私有registry(比如Verdaccio、Nexus)的npm端点可能不是根路径,比如可能需要写成http://my-registry:8081/npm,记得查下你用的registry官方文档确认正确端点。检查Registry是否开启了用户注册功能
npm的adduser命令会调用registry的/-/user/org.couchdb.user:<username>端点发送PUT请求。如果你的私有registry没启用用户注册,或者这个端点配置有误,就会返回404。比如Verdaccio默认允许注册,但如果配置了max_users: -1就会关闭;Nexus可能需要先在后台创建仓库并开启用户注册权限。去检查下registry的配置文件,确认注册功能是打开的。排查网络和代理问题
如果是在公司内网环境,可能有代理拦截了请求,导致实际没到达registry服务。可以试试关闭代理后再执行命令,或者配置npm使用正确的代理:npm config set proxy http://your-proxy-url:port npm config set https-proxy http://your-proxy-url:port另外,确认防火墙没有阻止8081端口的通信,用
telnet my-registry 8081测试下端口连通性。查看详细日志定位具体问题
你提到的日志文件里有更详细的请求细节,比如实际发送的URL、响应内容。打开日志往下翻,跳过开头的0 info it worked if it ends with ok,找具体的请求记录,比如可能会看到:npm ERR! 404 Not Found - PUT http://my-registry:8081/-/user/org.couchdb.user:rjohns
这会明确告诉你请求的端点不存在,进一步验证地址或配置的问题。试试用npm login替代adduser
有时候npm adduser和npm login在某些registry上表现略有不同,你可以尝试执行npm login --registry=http://my-registry:8081重新操作,看是否能成功完成用户添加。
内容的提问来源于stack exchange,提问作者Adam Johns




