使用Yarn安装@mui/icons-material:7.3.2时下载超时求助
问题背景
我尝试通过以下Yarn命令安装@mui/icons-material@7.3.2:
yarn add @mui/icons-material --verbose
命令执行到以下步骤时停滞直至超时:
verbose 43.4185964 Performing "GET" request to "https://registry.npmjs.org/@mui/icons-material/-/icons-material-7.3.2.tgz".
通过浏览器或curl命令访问该URL可立即完成下载,仅Yarn存在此问题,且仅该依赖出现卡顿。已尝试Stack Overflow上的常规网络问题解决方案,但无效。因必须运行防火墙,怀疑是其导致问题,想确认:
- 防火墙是否可能单独拦截某个进程?
- 还有哪些方法可进一步排查该连接问题?
解答
防火墙能否单独拦截特定进程?
可以。多数企业级或专业防火墙支持进程级访问控制,能针对Yarn的可执行文件(如yarn.exe或yarn二进制文件)设置出站规则,甚至细化到拦截特定域名、URL路径或请求方法。这种情况下,浏览器和curl不受影响、仅Yarn被限制是完全可能的。
进一步排查方法
测试Node.js底层请求:Yarn基于Node.js,可编写简单脚本用同类型HTTP客户端(如node-fetch)请求目标URL,验证是否是Node.js环境的问题:
const fetch = require('node-fetch'); async function testRequest() { try { const res = await fetch('https://registry.npmjs.org/@mui/icons-material/-/icons-material-7.3.2.tgz'); console.log('请求成功,状态码:', res.status); } catch (err) { console.error('请求失败:', err.message); } } testRequest();运行脚本若也超时,说明问题出在Node.js网络配置,而非Yarn本身。
检查Yarn代理配置:Yarn可能使用了与浏览器、curl不同的代理,执行以下命令查看并重置:
# 查看当前代理设置 yarn config get proxy yarn config get https-proxy # 临时清除代理 yarn config delete proxy yarn config delete https-proxy清除后重新执行安装命令测试。
抓包对比流量差异:用Wireshark抓取Yarn和curl请求该URL的网络包,对比两者的请求头、连接方式(如HTTP/1.1 vs HTTP/2),查看Yarn的请求是否被防火墙拦截(如收到RST包、无响应包)。
切换包管理器或Yarn版本测试:尝试用npm安装同一依赖,或换用不同版本的Yarn(如Yarn 1.x和Yarn Berry):
# npm测试 npm install @mui/icons-material@7.3.2 --verbose若npm正常,说明问题偏向Yarn特定版本的网络实现;若npm也超时,可能是Node.js整体被防火墙限制。
查看防火墙日志:检查防火墙的出站拦截日志,搜索Yarn进程或目标URL的记录,确认是否有匹配的拦截规则。多数防火墙会记录被拦截的进程、请求地址及规则ID,可直接定位问题。
测试Yarn对其他包的请求:尝试用Yarn安装同类型的包(如
@mui/material@7.3.2),若仅@mui/icons-material超时,可能是该包的URL路径被防火墙的字符串规则命中。
内容的提问来源于stack exchange,提问作者lordoku

