Nuxt 4.4.7 在 macOS 启动时报 connect EINVAL 和 .sock 路径
Nuxt4.4.7在macOS长临时目录生成过长Unix socket路径,开发SSR连接报EINVAL。核对4.4.8缩短与回退,临时目录需私有且不撤回IPC权限隔离。
开发服务启动后页面返回 500,终端里没有业务请求错误,而是反复出现很长的临时 socket 路径:
Error: connect EINVAL /var/folders/.../T/nuxt-vite-node-.../nuxt-vite-node-....sock
这是一种 Nuxt 4.4.7 在 macOS 上的开发环境故障。该版本生成的 Unix socket 路径可能超出系统限制,导致 Vite 开发进程间连接失败。正式版 Nuxt 4.4.8 已缩短名称并为过长临时目录提供回退处理。
报错里的路径比业务页面更有用
这里的 socket 用于开发环境内部通信,不是网站对外监听的 HTTP 端口。换浏览器、改 API 路由或给 3000 端口增加防火墙规则,都不会缩短它的文件系统路径。
保留准确的 Nuxt 版本和完整错误路径,核对它是否位于 macOS 的长临时目录下,末尾是否是 Nuxt Vite 的 .sock。路径长度按字节计算;不能把带中文等字符的字符串长度直接当成系统接受的字节数。EINVAL 本身也不只代表路径过长,路径不符合这一形态时应继续检查实际调用。
仅把项目移到一个更短的源码目录未必有用,因为这里使用的是系统临时目录。相反,如果开发进程继承的 TMPDIR 很长,源码目录再短也可能触发问题。
更新修复时保留 IPC 的访问限制
在现有版本范围与模块兼容条件下更新 Nuxt,检查实际锁定和安装的版本,而不是只修改清单范围。4.4.8 的生成逻辑使用更短的文件名;当系统临时目录仍导致路径过长时,会使用短路径,并继续为父目录设置仅当前用户可访问的权限。
不要为了避开这次回归退回较早版本的抽象 socket 实现,也不要把权限改成所有用户可访问。4.4.7 对开发 IPC 的访问限制与路径过长是两个问题;处理后者不能撤回前者的隔离。
暂时无法升级时,可以只给当前开发命令使用一个新建的、短路径私有临时目录。下面适用于已有 pnpm 开发脚本的 macOS 项目:
nuxt_socket_tmp=$(mktemp -d /tmp/nuxt-dev.XXXXXX)
chmod 700 "$nuxt_socket_tmp"
TMPDIR="$nuxt_socket_tmp" pnpm dev
它只给这次命令设置 TMPDIR,不修改系统或终端的长期配置。目录需由当前用户创建并保持私有,不要直接复用不明来源的固定 /tmp 目录。退出开发进程后再核对该目录内是否仍有任务使用的文件,仅清理本次创建的内容,不能批量删除其他进程的 socket。
重新启动后验证真实的 SSR 请求
停止原来的开发进程,再按项目原脚本启动。打开原来失败的 SSR 页面,确认内部 socket 连接成功、页面有实际正文,并修改一个模块核对热更新仍正常。终端打印 ready 不是完整的成功标准。
如果更换临时目录后仍报错,保留新的完整路径与错误码;权限错误、连接方未启动、旧 socket 残留应分别排查。也不要为这条开发 IPC 故障改生产反向代理或重新部署线上服务。


