我在使用 registry.npmjs.org 时遇到问题 -- 当我尝试通过命令行访问它时(例如,通过使用命令隐式访问npm
,或执行 时ping registry.npmjs.org
),访问失败,并出现 EHOSTUNREACH 或“目标无法访问”错误。但是,如果我尝试通过我的 Web 浏览器(Firefox)访问该网站,则连接没有问题。
一些在线搜索表明该问题可能与 IPv6/IPv4 有关。事实确实如此。使用开发人员控制台表明 Firefox 正在使用 IPv4 连接到站点,错误消息表明命令行应用程序正在使用 IPv6 地址。nslookup registry.npmjs.org
表示两种类型的地址的数量,并ping
在 IP 地址上直接使用确认 ping IPv4 地址有效,但 IPv6 地址无法访问。
我想专门针对 registry.npmjs.org(或者可能是整个 *.npmjs.org)关闭 IPv6 地址解析。据我所知,我在其他网站上没有遇到 IPv6 问题,所以我不想全局关闭 IPv6。
我在搜索中看到的所有帮助文章都是关于完全关闭 IPv6、为特定接口关闭 IPv6 或将所有站点更改为首选 IPv4。我希望避免这样做,并让设置中的更改仅适用于 npmjs.org 地址的解析。有办法吗?
答案1
你可以将主机名和其 IPV4 地址(之一)放入 /etc/hosts 中,如下所示
104.16.27.34 registry.npmjs.org
但你必须确保它保持最新,所以这更像是一种黑客攻击而不是真正的解决方案。
顺便说一句,至少截至今天,他们的 IPV6 似乎运行得很好
$ ping registry.npmjs.org
64 bytes from 2606:4700::6810:1e22 (2606:4700::6810:1e22): icmp_seq=1 ttl=58 time=10.8 ms