npm run崩溃因Node子进程堆内存超限,需在package.json脚本中添加node --max-old-space-size=4096前缀,或用cross-env注入NODE_OPTIONS;VSCode主进程非Node进程,修改其参数无效。

npm run 崩溃时,别动 VSCode 主进程参数
你在终端里执行 npm run dev 或 npm run build 报 FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory,这不是 VSCode 界面的问题,而是 CLI 工具(如 vite、vue-cli-service、webpack)启动的独立 Node.js 子进程堆内存超限。VSCode 主进程根本不是 Node.js 进程,--max-old-space-size 对它完全无效。
- 直接改
package.json的scripts字段,加node --max-old-space-size=4096前缀:比如把"build": "vite build"改成"build": "node --max-old-space-size=4096 ./node_modules/vite/bin/vite.js build" - Windows 下若用
vue-cli-service等封装命令,必须用cross-env注入环境变量:"dev": "cross-env NODE_OPTIONS=--max-old-space-size=4096 vue-cli-service serve" - 不要在 shell 里全局设
NODE_OPTIONS(比如export NODE_OPTIONS=...),它会影响你本地所有 Node 进程,包括 mock server、API 脚本,容易引发冲突 - 值设到
4096通常是够的;拉到8192很少真正有用,反而可能掩盖files.watcherExclude没配、TS 类型检查范围过宽等根本问题
远程开发时,远端 tsserver 内存爆掉怎么办
用 Remote-SSH 连服务器开发时,tsserver、searchService 都跑在远端,是独立 Node.js 进程,默认无内存上限。大型项目一索引就 OOM 被杀,现象是类型提示消失、Ctrl+Click 失效、突然断连。
- 在本地 VSCode 的
settings.json(用户级或工作区级)中添加:"remote.SSH.remoteServerEnv": { "VSCODE_NODE_OPTIONS": "--max-old-space-size=2048" } -
2048是稳妥起点;含大量.d.ts或 Lerna monorepo 可试3072;超过4096容易引发服务器整体 swap,得不偿失 - 改完必须完全关闭当前远程窗口(不只是 Reload Window),再重新 Connect —— 否则远端进程仍沿用旧参数
- 同步加固
search.exclude和files.watcherExclude,否则光调内存也扛不住递归扫描node_modules
想监控你刚 run 的 node app.js?VSCode 不管这事
VSCode 自身只监控自己的进程(main、extensionHost、renderer),不采集你手动运行的 node app.js 的 CPU、内存、事件循环延迟等数据。所谓“状态栏插件显示的 CPU%”,只是对整个 code 进程组的粗略采样,和你的脚本完全无关。
- 真要看
node app.js的实时资源,得去系统任务管理器找对应node进程,或在终端用ps -p $(pgrep -f 'app.js') -o pid,ppid,%cpu,%mem,rss,comm(macOS/Linux)持续采样 - 若要深度分析,必须用
--inspect-brk启动:node --inspect-brk app.js,然后在 VSCode 调试时点状态栏的Open dedicated DevTools for Node.js,进 Chrome DevTools 的 Performance 标签页录制 - 别信 “一键性能分析” 插件——它们多数只做界面包装,真正采样靠的是
node --inspect暴露的调试端口;没加这个参数,任何插件都抓不到真实 CPU 曲线
Extension Host 占内存太多?调参基本没用
Extension Host 是 VSCode 里跑插件的 Node.js 进程,RSS 超过 500MB 就该怀疑了。它不继承 --max-old-space-size,盲目加参数基本无效。
- 先执行
Cmd+Shift+P/Ctrl+Shift+P→Developer: Show Running Extensions,看 Memory 列,重点关注ms-python.python、dbaeumer.vscode-eslint、eamodio.gitlens这类启动即加载的扩展 - 禁用可疑扩展后,必须重启整个 VSCode 窗口(不是 Reload Window),否则旧进程还在
- 如果
Search进程吃资源,立刻检查.vscode/settings.json是否配了"files.watcherExclude",且格式为"**/node_modules/**": true;写错就等于没配 - Linux 用户若仍卡顿,检查
cat /proc/sys/fs/inotify/max_user_watches,低于524288建议调高
实际操作中最容易被忽略的,是每个场景生效的前提条件完全不同:改 package.json 脚本后要重新 npm run,改 remote.SSH.remoteServerEnv 后要彻底重连,改 files.watcherExclude 后要关闭并重开工作区——漏掉任意一个“重新触发”动作,配置就等于白设。


















