为什么不向前兼容?!解决npm i 安装类库时的 CERT_HAS_EXPIRED 错误

2024-02-22 15:35:58 浏览数 (1)

这个错误大概是这样的:

代码语言:javascript复制
npm ERR! code CERT_HAS_EXPIRED
npm ERR! errno CERT_HAS_EXPIRED
npm ERR! request to https://registry.npm.taobao.org/ylru/download/ylru-1.2.1.tgz failed, reason: certificate has expired

它是在我们执行 npm i 或 npm run xxx 指令时发生的。

这个错误是什么意思呢?

提示说,证书过期了或自定义证书无效,在访问和拉取https://registry.npm.taobao.org/ylru/download/ylru-1.2.1.tgz类库链接时,网络请求失败。

我们将这个链接拷贝一下,直接放在浏览器里访问,它也是不可访问的。(在问题爆发时)

这是由于淘宝仓库源网站的证书过期所致。

自2017年2月27日,npm不再支持自签名证书或过期证书。

而淘宝仓库网站恰好又使用了过期的自定义证书。当我们使用 npm i 安装某些类库时,例如类库地址为 https://registry.npm.taobao.org/ylru/download/ylru-1.2.1.tgz,此时npm无法验证来源,于是抛出了 CERT_HAS_EXPIRED 错误。

怎么解决呢?

关闭 SSL 验证:

代码语言:javascript复制
npm config set strict-ssl false

修改软件源,例如将软件源地址改回官网:

代码语言:javascript复制
npm config set registry https://registry.npmjs.org/

这个更改的副作用是,更新或安装类库时需要梯子,如果有梯子则无妨。

为什么不向前兼容呢?

不清楚,一向如此。

社区有一些规则的改变,属于基础改变,会对上面的一系列软件建筑产生致命影响。

采用 HTTPS 协议,要求 SSL 验证,不支持自定义的非法证书或过期证书,这些改动是由于安全需要,并非只有 npm 如此,像谷歌的浏览器也作了同样样的安全规则更改。

随着社会的进步,软件的发展,以后仍然会出现类似的基础规则改进,这些变动会对已有的旧软件产生“毁灭”性影响,后果是,你不修改代码或配置,软件就再也无法直接运行。

应对策略也简单,它不兼容我们,那就只有我们兼容它喽。

0 人点赞