npm模块安装,如何解决报错CERT_HAS_EXPIRED?
发布于 作者:苏南大叔 来源:程序如此灵动~
面对稍稍有些时间(比如半年以前)的node项目的时候,使用npm安装模块依赖的时候,就极有可能会各种warning漫天飞舞,并且最后还会安装失败,这就是nodejs项目所特有的现象。那么,本文中所描述模块安装时可能遇到的一个新的错误,报错内容是“CERT_HAS_EXPIRED”。这种现象该如何处理呢?

苏南大叔的“程序如此灵动”博客,记录苏南大叔的编程经验文章。本文测试环境:node@18.14.2,npm@9.6.7。
报错信息
报错信息类似如下:
npm ERR! code CERT_HAS_EXPIRED
npm ERR! errno CERT_HAS_EXPIRED
npm ERR! request to https://registry.npm.taobao.org/zrender/download/zrender-5.0.1.tgz?cache=0&sync_timestamp=1605884142817&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fzrender%2Fdownload%2Fzrender-5.0.1.tgz failed, reason: certificate has expired
npm ERR! A complete log of this run can be found in: C:\Users\sunan\AppData\Local\npm-cache\_logs\T10_33_59_334Z-debug-0.log
reason: certificate has expired关键词:certificate has expired。

排查过程
排查这里还需要查看npm的仓库设置,参考命令:
npm config get registry
通过排查可以发现:
package-lock.json文件中有很多npm.taobao.org的字样。- 而默认的仓库地址并不是淘宝的源,而是华为的仓库地址。
报错原因
报错原因居然是:淘宝源的网站ssl证书挂了!!直接访问这个淘宝源地址,可以看到下面的报错截图:

解决方案一
既然https服务挂了,可以强制不使用https服务,而使用http服务。执行下列命令:
npm cache clean --force
npm config set strict-ssl false然后再执行:
npm install解决方案二
可以直接更换一下这个淘宝的仓库地址,这个非常简单。可以更换为其它仓库地址的。命令如下:
npm config set registry https://registry.cnpmjs.org或者:
npm config set registry https://registry.npmmirror.comnpm config set registry https://repo.huaweicloud.com/repository/npm/更多仓库地址可以参考:
如果感觉配置没有生效,那么可以强制刷新一下缓存。执行命令:
npm cache clean --force解决方案三
个人建议使用cnpm或者yarn来安装相关依赖,比较官方的这个npm出错的概率挺大。当然,也开始试试最新的pnpm。命令如下:
cnpm installyarnpnpm install总结
苏南大叔来总结一下,解决方案的思路就是这样:
(1)哪个仓库地址挂了,那么就摒弃它,换个新的仓库地址吧。
(2)哪个包安装工具不好用,那么就换另外一个好用的新的安装工具。
更多苏南大叔的nodejs相关经验文章,请点击: