npm ERR! network timeout

一、问题

周一修改了一个地方,把分支合并到develop,然后自动触发gitlab的ci,等了一会再点开看log,发现报错了。
具体如下图所示:
npm ERR! network timeout_第1张图片

二、初步分析

看提示是说从源拉取依赖的时候,网络超时了。
初步断定是网络问题,所以想隔一会再重试看看。结果重试了好几次,结果都一样。

因为修改的功能需要在开发环境验证后,再部署到测试环境给测试验证,然后部署到预发布环境,所以还是比较着急的。
人是否成长就看在应对突发问题导致进展被卡住能否沉稳冷静解决问题。
但往往是说起来容易做起来难。
我觉得可以这样:在心里自己跟自己说几遍,从现在开始,给自己五分钟时间,什么都别想,从头到尾再仔细看看,找出问题所在。

因为上周五及之前跑ci都没问题,重试了几次也不行,也问了后台跑ci的机器网络等问题,也没改动什么,而我又没权限登录机器查看相关信息,所以只能搜索npm ERR! network timeout来分析问题。

三、各种说法:

1 npm set strict-ssl false

npm config set proxy http://proxy.example.com:3128  
npm config set https-proxy http://proxy.example.com:3128

npm config set cafile ""
https://stackoverflow.com/questions/13913941/how-to-fix-ssl-certificate-error-when-running-npm-on-windows/30341389

但我这边看过了,源站的https证书没问题,也没过期。我这边已经设置了 npm config set strict-ssl false,而且也不用设置什么proxy代理,也没有什么cafile。所以该方法不适用。

2 npm config set strict-ssl false

npm install npm -g --ca=""
// or 
npm config set ca ""

https://stackoverflow.com/questions/9626990/receiving-error-error-ssl-error-self-signed-cert-in-chain-while-using-npm

ca的方式倒是可以试试,因为只是清空而不像上面afile的需要用到证书文件。找了下 官网文档,然后我这边修改后重试了ci,问题还是一样。所以该方法不适用。

3 后台在curl源站地址的时候,提示证书问题,如下图所示:
npm ERR! network timeout_第2张图片
这个可能是curl只认CA证书,因为源站是Let's Encrypt证书,所以可在curl加上--insecure来验证源站。
所以问题依然不是源站证书问题。

4 npm --without-ssl --insecure install,但查看了官网,install是没有这两个参数的。
http://www.mannoun.net/how-to-configure-npm-and-yarn-behind-proxy-server/

分析问题的时候,时间依然在走,紧张感又来了。此时可强迫自己去喝杯水或洗把脸,再回座位从头再来。

四、问题找到了

在打开nodejs官网的时候,无意中看到有2个版本,如下图所示:
npm ERR! network timeout_第3张图片
npm ERR! network timeout_第4张图片
而ci配置文件中,node用的是最新版image: node:latest。所以感觉是版本问题。
然后台帮忙查看了下node和npm版本,发现真的是拉取到最新版了,而自己电脑的版本是LTS。
ci机器的版本如下图:
npm ERR! network timeout_第5张图片
自己电脑的版本如下图:

快速验证方法就是把node指定LTS版本(image: node:12.16.1),然后再跑ci测试下。
结果通了,如下图所示:
npm ERR! network timeout_第6张图片

五、总结

  1. 沉着冷静的心态很重要
  2. 分析问题需要认真细致,不放过任何蛛丝马迹
  3. 平时的也要多学习,不用局限特定范畴。前端、后台、镜像等甚至底层原理,都可以多学学

你可能感兴趣的:(npm前端)