问题描述 opencode刚刚之前还用的好好地,越用越卡,直到只额吉用的时候就报错ENAMETOOLONG: name too long, uv_spawn
opencode使用这就报错:::

原因就是opencode不断地往某个东西里面设置东西,环境变量膨胀
最可能的原因:npx 缓存路径膨胀
跳过细节就一行命令搞定:
npm cache clean --force
排查过程
使用命令查看环境变量大小:
shell
$total=0; [System.Environment]::GetEnvironmentVariables().Values | ForEach-Object { $total += $_.Length }; $total
具体结果;
PS D:\zhawu\self\r> total=0; \[System.Environment\]::GetEnvironmentVariables().Values \| ForEach-Object { total += _.Length }; total
2753
使用命令查看设置了哪些环境变量:
shell
[System.Environment]::GetEnvironmentVariables() | ForEach-Object { $_.Keys } | ForEach-Object { [PSCustomObject]@{Name=$_; Length=[System.Environment]::GetEnvironmentVariable($_).Length; Value=[System.Environment]::GetEnvironmentVariable($_)} } | Sort-Object Length -Descending | Format-Table -AutoSize -Wrap
具体结果;
shell
PS D:\zhawu\self\jianzhixiangmu\ruoyi-ai-bigmodel-server> [System.Environment]::GetEnvironmentVariables() | ForEach-Object { $_.Keys } | ForEach-Object { [PSCustomObject]@{Name=$_; Length=[System.Environment]::GetEnvironmentVariable($_).Length; Value=[System.Environment]::GetEnvironmentVariable($_)} } | Sort-Object Length -Descending | Format-Table -AutoSize -Wrap
Name Length Value
---- ------ -----
Path 526 D:\anzbao\jdk21\jdk-21.0.7\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;D:\anzbao\Mav
en\apache-maven-3.9.13\bin;D:\anzbao\gitanzb\Git\cmd;D:\anzbao\nodejs\;D:\anzbao\nodejs\node_global;D:\anzbao\python\Scripts\;D:\anzbao\python\;C:\Users\Admin\AppData\Local\
Microsoft\WindowsApps;D:\anzbao\idea\IntelliJ IDEA 2025.3.2\bin;C:\Users\Admin\AppData\Roaming\npm;C:\Users\Admin\AppData\Local\Programs\Ollama;D:\anzbao\codebuddy\CodeBuddy
CN\bin
PSModulePath 144 C:\Users\Admin\Documents\WindowsPowerShell\Modules;C:\Program Files\WindowsPowerShell\Modules;C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules
JETBRAINS_CLIENT_VM_OPTIONS 77 D:\anzbao\idea\jetbra-pojie\win2021-2025\vmoptions\jetbrains_client.vmoptions
JETBRAINSCLIENT_VM_OPTIONS 76 D:\anzbao\idea\jetbra-pojie\win2021-2025\vmoptions\jetbrainsclient.vmoptions
DEVECOSTUDIO_VM_OPTIONS 73 D:\anzbao\idea\jetbra-pojie\win2021-2025\vmoptions\devecostudio.vmoptions
DATASPELL_VM_OPTIONS 70 D:\anzbao\idea\jetbra-pojie\win2021-2025\vmoptions\dataspell.vmoptions
WEBSTORM_VM_OPTIONS 69 D:\anzbao\idea\jetbra-pojie\win2021-2025\vmoptions\webstorm.vmoptions
RUBYMINE_VM_OPTIONS 69 D:\anzbao\idea\jetbra-pojie\win2021-2025\vmoptions\rubymine.vmoptions
DATAGRIP_VM_OPTIONS 69 D:\anzbao\idea\jetbra-pojie\win2021-2025\vmoptions\datagrip.vmoptions
PHPSTORM_VM_OPTIONS 69 D:\anzbao\idea\jetbra-pojie\win2021-2025\vmoptions\phpstorm.vmoptions
PYCHARM_VM_OPTIONS 68 D:\anzbao\idea\jetbra-pojie\win2021-2025\vmoptions\pycharm.vmoptions
APPCODE_VM_OPTIONS 68 D:\anzbao\idea\jetbra-pojie\win2021-2025\vmoptions\appcode.vmoptions
GATEWAY_VM_OPTIONS 68 D:\anzbao\idea\jetbra-pojie\win2021-2025\vmoptions\gateway.vmoptions
WEBIDE_VM_OPTIONS 67 D:\anzbao\idea\jetbra-pojie\win2021-2025\vmoptions\webide.vmoptions
STUDIO_VM_OPTIONS 67 D:\anzbao\idea\jetbra-pojie\win2021-2025\vmoptions\studio.vmoptions
GOLAND_VM_OPTIONS 67 D:\anzbao\idea\jetbra-pojie\win2021-2025\vmoptions\goland.vmoptions
RIDER_VM_OPTIONS 66 D:\anzbao\idea\jetbra-pojie\win2021-2025\vmoptions\rider.vmoptions
CLION_VM_OPTIONS 66 D:\anzbao\idea\jetbra-pojie\win2021-2025\vmoptions\clion.vmoptions
IDEA_VM_OPTIONS 65 D:\anzbao\idea\jetbra-pojie\win2021-2025\vmoptions\idea.vmoptions
PATHEXT 58 .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL
PROCESSOR_IDENTIFIER 52 Intel64 Family 6 Model 142 Stepping 12, GenuineIntel
DM_HOME 50 D:\anzbao\navicate\dameng_odbc_win\dameng_odbc_win
IntelliJ IDEA 41 D:\anzbao\idea\IntelliJ IDEA 2025.3.2\bin
WT_PROFILE_ID 38 {61c54bbd-c2c6-5271-96e7-009a87ff44bf}
DriverData 38 C:\Windows\System32\Drivers\DriverData
WT_SESSION 36 3e1ba61d-50ae-46d5-85e0-28043d684ce2
CommonProgramFiles(x86) 35 C:\Program Files (x86)\Common Files
MAVEN_HOME 35 D:\anzbao\Maven\apache-maven-3.9.13
TMP 33 C:\Users\Admin\AppData\Local\Temp
TEMP 33 C:\Users\Admin\AppData\Local\Temp
APPDATA 30 C:\Users\Admin\AppData\Roaming
CommonProgramW6432 29 C:\Program Files\Common Files
CommonProgramFiles 29 C:\Program Files\Common Files
LOCALAPPDATA 28 C:\Users\Admin\AppData\Local
ComSpec 27 C:\WINDOWS\system32\cmd.exe
JAVA_HOME 26 D:\anzbao\jdk21\jdk-21.0.7
WSLENV 25 WT_SESSION:WT_PROFILE_ID:
OneDrive 23 C:\Users\Admin\OneDrive
ProgramFiles(x86) 22 C:\Program Files (x86)
LOGONSERVER 17 \\DESKTOP-7DIAQ6J
ProgramFiles 16 C:\Program Files
ProgramW6432 16 C:\Program Files
USERDOMAIN 15 DESKTOP-7DIAQ6J
PUBLIC 15 C:\Users\Public
COMPUTERNAME 15 DESKTOP-7DIAQ6J
USERDOMAIN_ROAMINGPROFILE 15 DESKTOP-7DIAQ6J
ProgramData 14 C:\ProgramData
ALLUSERSPROFILE 14 C:\ProgramData
USERPROFILE 14 C:\Users\Admin
HOMEPATH 12 \Users\Admin
windir 10 C:\WINDOWS
SystemRoot 10 C:\WINDOWS
OS 10 Windows_NT
SESSIONNAME 7 Console
USERNAME 5 Admin
PROCESSOR_ARCHITECTURE 5 AMD64
PROCESSOR_REVISION 4 8e0c
HOMEDRIVE 2 C:
SystemDrive 2 C:
ZES_ENABLE_SYSMAN 1 1
NUMBER_OF_PROCESSORS 1 8
PROCESSOR_LEVEL 1 6
系统环境变量只有 2753 字符,但 Bun/IDE 在 spawn 子进程时可能会注入大量额外环境变量,这些不在系统列表里。:
更准确的诊断
请运行以下命令,看看实际 spawn 时的环境有多大:
bun -e "console.log(Object.keys(process.env).reduce((s,k) => s + k.length + process.env[k].length, 0))"
如果 Bun 本身没装,也可以用 Node:
node -e "console.log(Object.keys(process.env).reduce((s,k) => s + k.length + process.env[k].length, 0))"
这会显示进程实际拿到的环境变量总大小。如果结果远大于 2753,说明 IDE 注入了大量变量。
运行结果:
shell
PS D:\zhawu\self\jianzhixiangmu\ruoyi-ai-bigmodel-server> node -e "console.log(Object.keys(process.env).reduce((s,k) => s + k.length + process.env[k].length, 0))"
3597
PS D:\zhawu\self\jianzhixiangmu\ruoyi-ai-bigmodel-server>
根本原因是 MCP 配置。OpenCode 启动时会 spawn 所有 mcp 配置中的子进程,你配置了 7 个 MCP 服务器,每个都用 npx 启动。在 Windows 上,7 个 MCP 同时 spawn npx 进程,加上 @latest 标记会触发 npm 拉取,环境块叠加容易触发 ENAMETOOLONG。
另外,filesystem MCP 的路径含中文:D:\zhawu\self\jianzhixiangmu,这也是潜在问题。
解决方案
先禁用不常用的 MCP,减少同时 spawn 的进程数:
json
"mcp": {
"gitee": { "enabled": false },
"filesystem": { "enabled": true },
"mysql": { "enabled": false },
"context7": { "enabled": false },
"playwright": { "enabled": false },
"git": { "enabled": false },
"memory": { "enabled": false }
}
感觉还是不行,这上午还用的好好的,下午突然就开始报 ENAMETOOLONG。这说明不是配置或路径本身的问题(这些没变过),而是某个运行时状态发生了变化。
于是我问了一下AI深度思考可能的原因:
-
npx 缓存累积 - OpenCode 用
npx -y启动 MCP 服务器,每次运行都会在 npm 缓存中下载/验证包。随着时间推移,npm 缓存路径可能变得很长(尤其是node_modules/.cache下的深层路径) -
npm 全局安装路径 -
npx -y @latest会把包安装到一个临时目录,路径类似%LOCALAPPDATA%\npm-cache\_npx\下,包名+版本+hash 可能形成很长的路径 -
OpenCode 会话数据膨胀 - 随着对话进行,session 数据可能越来越大,导致某些内部路径/参数过长
-
Windows 长路径问题 - 某些 npm 包的 node_modules 嵌套层级非常深,超过了 Windows 260 字符限制
-
临时文件累积 -
%TEMP%或%APPDATA%下的缓存
最可能的原因是 npx 缓存 。每次 npx -y @xxx@latest 运行时,npm 会在 %LOCALAPPDATA%\npm-cache\_npx\ 目录下创建临时包,路径结构类似:
C:\Users\Admin\AppData\Local\npm-cache\_npx\{hash}\node_modules\@modelcontextprotocol\server-filesystem\node_modules\...
这种嵌套路径很容易超过 260 字符限制,尤其是加上中文路径后。
而且用户说"用着用着就这样的",说明可能是:
- npx 缓存不断累积
- 某个 npm 包更新了,新版本的依赖层级更深
- OpenCode 会话数据增长导致某些参数过长
让我建议用户检查 npm 缓存目录,以及清理 npx 缓存。
另外,filesystem MCP 报了 MCP error-32000: Connection closed,这说明 filesystem MCP 也启动失败了。
我应该让用户:
- 清理 npm/npx 缓存
- 检查 npm cache 路径长度
- 启用 Windows 长路径支持
你说得对,让我重新深度思考。上午好好的,下午突然不行 --- 这说明不是配置或路径本身的问题,而是运行时状态发生了变化。
最可能的原因:npx 缓存路径膨胀
OpenCode 用 npx -y @xxx@latest 启动 MCP 服务器。每次运行时,npm 会在本地创建临时包,路径结构类似:
C:\Users\Admin\AppData\Local\npm-cache\_npx\{hash}\node_modules\@modelcontextprotocol\server-filesystem\node_modules\...
随着时间推移,这些缓存不断累积,或者某个包更新后依赖层级变深,导致路径超过 Windows 260 字符限制。
诊断验证
运行以下命令检查 npx 缓存:
cmd
dir /s /b "%LOCALAPPDATA%\npm-cache\_npx" 2>nul | findstr /r ".*\\\\.*\\\\.*\\\\.*\\\\.*\\\\.*\\\\.*\\\\.*\\\\.*\\\\.*" > %TEMP%\long_paths.txt
for /f %i in ('type %TEMP%\long_paths.txt ^| find /c /v ""') do @echo 超长路径数量: %i
再检查 npm 缓存总大小:
cmd
npm cache ls 2>nul & echo --- & du -sh "%LOCALAPPDATA%\npm-cache" 2>nul || echo 无法统计
最快的解决方案
1. 清理 npx 缓存:
cmd
rd /s /q "%LOCALAPPDATA%\npm-cache\_npx"
2. 清理 npm 缓存:
cmd
npm cache clean --force
3. 启用 Windows 长路径支持(治本):
cmd
reg add "HKLM\SYSTEM\CurrentControlSet\Control\FileSystem" /v LongPathsEnabled /t REG_DWORD /d 1 /f
设置后需要重启电脑生效。
4. 重启后再运行 opencode。
建议先执行步骤 1 和 2,不用重启就能试。如果还不行就执行步骤 3 + 重启。
就可以继续愉快的使用了
