MALOUDA-PSA 2024-07-24 12:05 采纳率: 96.7%
浏览 7
已结题

npm install 出错


npm ERR! code CERT_HAS_EXPIRED
npm ERR! errno CERT_HAS_EXPIRED
npm ERR! request to https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz failed, reason: certificate has expired

npm ERR! A complete log of this run can be found in:
  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2024-07-24 12:05
    关注

    以下内容由AIGC及阿里嘎多学长共同生成、有用望采纳:


    根据你提供的错误信息和需求,我给出的解决方案如下:

    问题分析

    错误提示 CERT_HAS_EXPIRED 表示你尝试从淘宝的 npm 镜像源下载 semver 包时,由于 SSL 证书过期导致连接失败。

    解决方法

    方法一:更换 npm 镜像源

    1. 清除 npm 缓存:

      npm cache clean --force
      
    2. 更换为 npm 官方镜像源:

      npm config set registry https://registry.npmjs.org/
      
    3. 重新尝试安装:

      npm install
      

    方法二:更新本地证书

    1. 下载最新的 CA 证书: 访问 https://curl.se/ca/cacert.pem 下载。

    2. 配置 npm 使用新的 CA 证书:

      npm config set cafile /path/to/cacert.pem
      

      替换 /path/to/cacert.pem 为你下载的证书文件的实际路径。

    3. 重新尝试安装:

      npm install
      

    方法三:临时忽略 SSL 验证(不推荐)

    作为临时解决方案,可以通过以下命令忽略 SSL 验证:

    npm --cafile=/dev/null install
    

    注意: 这会降低安全性,不推荐在生产环境中使用。

    编程实现

    如果你希望自动化这个过程,可以使用 Node.js 编写脚本来检查证书状态,并在必要时更换镜像源。

    1. 检查证书状态

      const https = require('https');
      const url = require('url');
      
      const checkCertificate = (hostname) => {
        return new Promise((resolve, reject) => {
          const req = https.get({
            host: hostname,
            path: '/',
            rejectUnauthorized: false
          }, (res) => {
            const cert = res.socket.getPeerCertificate();
            const now = new Date();
            const certEndDate = new Date(cert.valid_to);
      
            if (now > certEndDate) {
              reject(new Error('证书已过期'));
            } else {
              resolve('证书有效');
            }
          }).on('error', (err) => {
            reject(err);
          });
        });
      };
      
    2. 自动更换镜像源

      const execSync = require('child_process').execSync;
      
      checkCertificate('registry.npm.taobao.org').then(() => {
        console.log('证书有效,无需更换镜像源');
      }).catch((error) => {
        console.error('证书过期,正在更换镜像源...');
        execSync('npm config set registry https://registry.npmjs.org/');
        console.log('镜像源更换完成');
      });
      

    总结

    • 问题是由于淘宝 npm 镜像源的 SSL 证书过期。
    • 解决方案包括更换镜像源、更新本地证书或临时忽略 SSL 验证。
    • 通过编程实现可以自动化这个过程,确保开发环境的稳定性。

    希望这些解决方案能够帮助你解决问题。如果还有其他问题或需要进一步的帮助,请随时告诉我。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 8月1日
  • 已采纳回答 7月24日
  • 创建了问题 7月24日

悬赏问题

  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 在虚拟机环境下完成以下,要求截图!
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见