指定HTTP镜像源后NPM仍强制使用HTTPS的问题求助
问题解决:NPM强制使用HTTPS访问HTTP私有仓库
核心原因
你的用户级~/.npmrc中使用了//my.repository.com/...格式的认证配置,这种写法默认会让NPM关联HTTPS协议的仓库地址,即使项目级.npmrc指定了HTTP的registry,NPM会优先匹配带认证信息的HTTPS配置,从而自动切换协议。
另外需要确认Nexus仓库本身没有开启HTTP到HTTPS的重定向——如果Nexus收到HTTP请求后返回302重定向到HTTPS,NPM会自动跟随重定向,最终使用HTTPS地址拉取依赖。
解决方案
1. 修改用户级.npmrc的认证配置格式
将//开头的认证配置改为完整的HTTP协议前缀,确保认证信息与HTTP仓库绑定:
http://my.repository.com/repository/npm-group/:_authToken=NpmToken.xxx email=me@email.com always-auth=true http://my.repository.com/repository/npm-private/:_authToken=NpmToken.xxx
2. (可选)在项目级.npmrc中添加完整配置
如果不想修改用户级配置,可以在项目目录的.npmrc中补充认证配置,覆盖用户级的HTTPS关联:
registry=http://my.repository.com/repository/npm-group/ http://my.repository.com/repository/npm-group/:_authToken=NpmToken.xxx always-auth=true
3. 检查Nexus仓库的重定向设置
登录Nexus管理后台,进入npm-group仓库的配置页面:
- 确认
Base URL设置为http://my.repository.com/repository/npm-group/ - 检查Nexus的全局HTTP设置,确保没有开启强制HTTPS重定向(比如反向代理或Nexus自身的SSL配置)
4. 清理缓存后重新安装
完成配置修改后,执行以下命令彻底清理并重新安装:
rm -rf node_modules package-lock.json npm cache clean --force npm install
验证
执行npm -ddd install查看日志,如果输出的请求地址为http://my.repository.com/...,则配置生效;同时检查生成的package-lock.json,resolved字段也会使用HTTP地址。
内容的提问来源于stack exchange,提问作者Ale Sanchez
相关产品推荐
相关产品推荐

