在使用 node 22.5.0 npm install 失败时的问题

429 阅读2分钟

在 Node.js 环境中使用淘宝镜像安装依赖时,遇到 CERT_HAS_EXPIRED 错误和 TLS 验证问题是一个常见的问题,特别是随着 Node.js 和 npm 的版本更新,TLS 证书的管理变得更加严格。切换至淘宝镜像时,出现了 TLS 验证错误。这是因为 npm 从 v7 版本开始加强了 TLS 证书验证,导致某些镜像源(如淘宝镜像)未及时更新或没有支持最新的 TLS 协议

问题分析

在使用 npm 时,你遇到了以下几个问题:

  • 清空npm 缓存 npm cache clean --force 重新安装无法成功
  • 使用 ping https://registry.npm.taobao.org 说明网络正常
  • 查看代理 npm config get proxy npm config get https-proxy 都为空说明不是代理异常
  • npm 更新无效:你尝试通过 npm install -g npm 更新 npm,但更新后仍然无法成功安装依赖。
  • 通过查询资料后发现 有一个TLS的东西,解决过程如下:

解决过程

  • 镜像源更换:切换淘宝镜像 npm config set registry https://registry.npm.taobao.org
    npm ERR! code CERT_HAS_EXPIRED
    npm ERR! errno CERT_HAS_EXPIRED
    npm ERR! request to https://registry.npm.taobao.org/miniprogram-api-typings/-/miniprogram-api-typings-3.12.0.tgz failed, reason: certificate has expired
    npm ERR! A complete log of this run can be found in: C:\Users\uljdc\AppData\Local\npm-cache\_logs\2024-11-12T07_27_21_890Z-debug-0.log
  • 禁用 TLS 证书验证:你通过设置 npm config set strict-ssl false 来禁用 npm 的 TLS 证书验证,解决了安装依赖的问题。虽然这能够绕过证书验证的问题,但禁用证书验证可能带来安全风险,尤其是与公共 npm 仓库的通信时,可能暴露于中间人攻击等安全威胁。 后案装成功

推荐解决方案

  • 优先使用官方 npm 镜像:建议使用官方的 npm 镜像源(registry.npmjs.org)或 registry.npmmirror.com,避免依赖证书过期的淘宝镜像。切换镜像源后,可以通过以下命令恢复 npm 默认的行为:
  • 使用较新的 Node.js 和 npm 版本:建议将 Node.js 和 npm 更新到较新的版本,特别是在升级了操作系统或证书时,确保环境是最新的。可以使用 nvm(Node Version Manager)来轻松管理不同的 Node.js 版本:
  • 慎用 strict-ssl false 设置:禁用 TLS 证书验证虽然能够解决问题,但应当谨慎使用,最好在生产环境中避免此做法,因为它会让系统暴露于潜在的安全威胁之下。
  • 报告问题给 npm 官方:如果你遇到的是 npm 本身的问题,可以向 npm 官方仓库报告问题,查看是否有相关的 bug 或解决方案。

总结,在实际使用过程中 手动下载证书方案 比较复杂需要去微软官方查找对应资料, 切换NODE.JS版本方案 可能会由于node版本不匹配导制某些包无法使用 禁用 TLS 证书验证方案 简单快,所以在紧 急情况下使用禁用 TLS 方案应急较稳。