前言
目前在编码开发人员的系统里或实际项目中,基本都会用到一些系统级或特定环境的包管理工具,这些工具很大程度上解决了我们对各种依赖问题。但是我们在使用这些工具时也会经常发现会有这样那样的问题。
比如:npm insall [包名] 卡在 下面这个提示一直不动。
idealTree:lib: sill idealTree buildDeps
提示:我们只做问题发现后的解决思路分析,所以本文,我们将只用 npm 举例,其他包管理工具(我在用git时也发现过类似的问题),如果常规搜索出的解决办法,不能帮助你时,你可以分析下是否有我一样的环境。
折腾
一般这类问题都是因为库服务网络不通。好像很好解决这个问题,在搜索引擎的帮助下,我得到了如下几个解决办办法:
1、修改 registry 为国内镜像,提到最多的是taobao的 https://registry.npm.taobao.org ,现在已经改成 https://registry.npmmirror.com 地址了;
2、一堆的清缓存、删除已经安装的目录等等,然后开启‘重启大法’,你就开始陷入循环的重启、重置、重新npm install;
3、告诉你你的网络和外面不通,让你使用一些工具,翻山越岭~~~~,这个不细说了;
好吧,在我用的认为我很扎实的基础知识下,我还是把上面的这些方法都试了一次。直到我看到一位兄弟说,ping了一下 registry.npmmirror.com 域名,确认是通的后就可以了。
懵逼
额~~~~,我也ping了一下,等等,为什么我ping不通???但是浏览器里,我是可以打开镜像站点的。
admin@debian:~$ ping registry.npmmirror.com
PING registry.npmmirror.com(2408:870c:1000:7:3::3fc (2408:870c:1000:7:3::3fc)) 56 data bytes
^C
--- registry.npmmirror.com ping statistics ---
6 packets transmitted, 0 received, 100% packet loss, time 5115ms
请专注一点,ping 的结果里,解析出来的IP是v6 [2408:870c:1000:7:3::3fc],原来是v6的环境不通,可是我用的是v4、v6双栈啊!!!
人间清醒
冷静思考一下,是不是优先使用v4就能解决?
我用的是Debian ,再次百度得到“Debian Linux设置IPv4访问优先”。
修改文件:/etc/gai.conf ,在Debian系的系统里好像都是这个文件
先打开他:
sudo vi /etc/gai.conf
查找到
#precedence ::ffff:0:0/96 100
修改为
precedence ::ffff:0:0/96 100
再ping registry.npmmirror.com,通了,解析出的v4地址
admin@debian:~$ ping registry.npmmirror.com
PING registry.npmmirror.com.w.cdngslb.com (119.188.172.172) 56(84) bytes of data.
64 bytes from 119.188.172.172 (119.188.172.172): icmp_seq=1 ttl=56 time=15.0 ms
64 bytes from 119.188.172.172 (119.188.172.172): icmp_seq=2 ttl=56 time=15.5 ms
^C
--- registry.npmmirror.com.w.cdngslb.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
npm install也ok了,好像一切的锅都让v6抗下了,哈哈~~~
并不是,你看
root@debian:~# ping registry.npmmirror.com
PING registry.npmmirror.com(2408:872b:f01:1002:3::3fb (2408:872b:f01:1002:3::3fb)) 56 data bytes
64 bytes from 2408:872b:f01:1002:3::3fb (2408:872b:f01:1002:3::3fb): icmp_seq=1 ttl=54 time=35.9 ms
……
64 bytes from 2408:872b:f01:1002:3::3fb (2408:872b:f01:1002:3::3fb): icmp_seq=9 ttl=54 time=37.1 ms
^C64 bytes from 2408:872b:f01:1002:3::3fb: icmp_seq=10 ttl=54 time=36.0 ms
--- registry.npmmirror.com ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9008ms
rtt min/avg/max/mdev = 35.644/42.175/94.269/17.369 ms
思考
所以问题在哪里呢?大家自己研究吧,总之优先使用v4后,解决了包管理的一个问题。
声明:只是提供一个方法供大家参考,并不一定能解决你的问题,总之在解决问题的时候,要注意细节。即便是别人成功的解决方案,也需要结合自己的情况综合处理。