如何解决npm忽略git+https配置将package-lock.json依赖改为git+ssh问题
可行解决方案
以下方案可单独使用,也可搭配使用实现多重保障:
- 项目级npm配置强制走HTTPS拉取GitHub依赖
在项目根目录新增.npmrc文件,写入以下配置:
或者在项目目录下执行命令git+ssh://git@github.com/ = git+https://github.com/npm config set git+ssh://git@github.com/ git+https://github.com/ --location project自动生成该配置。该配置会随代码提交到仓库,所有开发人员拉取代码后,npm在安装依赖、生成lock文件时会自动将所有GitHub的SSH依赖地址转为HTTPS格式,从根源避免lock文件被自动改写为SSH源。 - 提交前校验lock文件格式
可在项目的Git提交钩子(如pre-commit、lint-staged规则)中增加校验逻辑,检查package-lock.json中是否存在git+ssh://git@github.com前缀的依赖地址,一旦匹配就阻断提交,避免异常格式的lock文件进入代码仓库。 - CI侧兜底配置
就算出现异常格式的lock文件流入仓库,也可以在CI构建任务的依赖安装步骤前,执行以下命令:git config --global url."https://github.com/".insteadOf ssh://git@github.com/
该配置会让git在拉取代码时自动将所有GitHub的SSH请求替换为HTTPS请求,公共仓库不需要身份验证即可拉取,可直接规避构建失败问题。
内容的提问来源于stack exchange,提问作者Tobi
相关产品推荐
相关产品推荐

