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

共 1171字,需浏览 3分钟

 ·

2024-04-11 01:57

6b4a11283bd0ad2e90adc3ad30173a8b.webp

这个错误大概是这样的:

      
        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 验证:

      
        npm config set strict-ssl false
      
    

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

      
        npm config set registry https://registry.npmjs.org/
      
    

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

为什么不向前兼容呢?

不清楚,一向如此。

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

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

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

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

浏览 21
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报