Wrangler 部署报错:libuv 断言失败与终端代理穿透
npx wrangler pages deploy dist 上传到服务器报错

报错原因
-
分析核心报错:
Unable to resolve Cloudflare's API hostname。这说明 Wrangler 在尝试连接 Cloudflare 服务器进行鉴权或上传时,DNS 解析失败或连接超时。 -
分析次生报错:
Assertion failed: !(handle->flags & UV_HANDLE_CLOSING)。这是一个底层 Node.js (libuv 引擎) 的 C 语言级别崩溃。通常发生在 Windows 系统下,当网络请求被底层强制阻断(比如代理软件强行切断连接,或 DNS 污染导致 Socket 异常挂起)时,Node.js 销毁异步句柄失败导致的连环崩溃。 -
定位场景:你在 PowerShell (
PS) 下运行,且大概率处于国内网络环境。Node.js 和 Wrangler 默认不会读取 Windows 系统的全局代理设置。即使你开了梯子,终端里的命令依然在直连,从而被墙拦截。
核心结论
Wrangler 部署失败是因为 Node.js 进程没有走代理,导致无法连接 Cloudflare API,并在网络超时阻断时引发了底层的 libuv 句柄崩溃。
详细分析
-
终端网络隔离:Windows 系统代理对绝大多数基于 Node.js/Go/Python 的 CLI 工具无效。Wrangler 尝试直连
api.cloudflare.com,遭遇 DNS 污染或连接重置。 -
C 级断言崩溃:最后的
Assertion failed并不是你的代码写错了,而是 Wrangler 在处理这次严重的网络连接失败时,底层 Socket 关闭逻辑出现了竞态条件,导致 Node.js 进程非正常退出。 -
npmrc 警告说明:第一行的
npm warn Unknown project config "shamefully-hoist"不影响部署。这是因为你项目根目录的.npmrc里写了 pnpm 的专属配置,而你当前使用的是 npm/npx 运行,npm 不认识这个字段。
解决方案
你需要手动在当前的 PowerShell 终端窗口中注入代理环境变量,强迫 Wrangler 走你的本地代理。
第一步:确定你的本地代理端口 打开你的代理软件(如 Clash, v2rayN 等),查看本地 HTTP 代理端口(通常 Clash 是 7890,v2rayN 是 10809)。
第二步:在 PowerShell 中临时设置代理并运行 直接复制以下命令到你的 PowerShell 终端中执行(假设你的本地端口是 7890,请按需修改):
# 1. 设置当前终端的代理环境变量
$env:HTTP_PROXY="http://127.0.0.1:7890"
$env:HTTPS_PROXY="http://127.0.0.1:7890"
# 2. 重新执行部署命令
npx wrangler pages deploy dist
补充说明:
-
这两个环境变量只在当前这个 PowerShell 窗口生效,关掉终端就会失效,不会污染你的系统环境。
-
如果你后续觉得每次输入太麻烦,可以考虑使用
px或者改用pnpm dlx配合全局网络工具,但在当前排障阶段,直接注入环境变量是最稳妥的做法。如果授权时弹出了浏览器验证,验证成功后切回终端等待上传完成即可。