问题:网上下载项目进行npm i安装依赖包出现报错
npm ERR! request to https://registry.npm.taobao.org/@xtuc/long/download/@xtuc/long-4.2.2.tgz failed, reason: certificate has expired
certificate has expired,认证已经失效的意思。网上查询后初步断定是代理问题,由于淘宝镜像已经将https://registry.npm.taobao.org弃用,现在使用的是https://registry.npmmirror.com/。于是我将npm的代理更新到最新的npm淘宝镜像,在终端执行如下代码
npm config set registry https://registry.npmmirror.com/
然后可以通过
npm config get registry ///查看当前npm源
重新执行
npm -i
并没有什么用,一样的问题。确定已经更改了最新的淘宝镜像,并且网上搜索也没有得到解决方案后,我查看项目配置文件
在package-lock.json中发现,储存的地址是https://registry.npm.taobao.org
发现这个问题后尝试将前缀改为新的镜像地址
然后依旧报错
npm ERR! sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= integrity checksum failed when using sha1: wanted sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= but got sha1-rs+z1bzjVGbGKApfE3i0/PbpZIU=. (161219 bytes)
sha1匹配值对不上。也就是换了新镜像后更改了sha1匹配值。
遂将package-lock.json文件整个删除,然后重新进行npm安装依赖包解决问题。
总结
出现问题应该进行一步一步排查,例如本次事件优先排除是否镜像代理出问题,然后查看配置文件,慎用网络搜索(我网上查了半天没解决问题),通过对原理的深究来解决问题。
本次解决问题加深了npm使用经验,常用的设置镜像指令如下
npm config get registry
#查看当前镜像源,cnpm同理
npm config set registry 镜像地址
#设置当前npm的镜像
npm config set proxy 127.0.0.1:7890
#设置http代理,当一些包需要在官网下载的时候使用,避免下载太慢。该地址是clash的默认地址,clash默认开启7890端口。根据你自己使用的代理方式修改127.0.0.1:7890
npm config set https-proxy 127.0.0.1:7890
#设置https代理