Webpack构建卡死或OOM的根源是VSCode后台监听和插件预热:需在工作区.vscode/settings.json中配置files.watcherExclude(规则含**/),启用tsconfig.json的incremental、skipLibCheck,启动时加--max-memory=4096并禁用插件。

Webpack 构建卡死或 OOM?先关掉 VSCode 默认监听
VSCode 启动时默认对整个工作区注册 inotify 监听,遇到含 node_modules、dist、build 的 Webpack 项目,会瞬间创建数万个文件句柄——这不是 Webpack 慢,是 VSCode 在后台疯狂扫描你根本不会编辑的文件。现象包括:终端构建卡在 webpack --watch 阶段不动、内存飙升到 4GB+、CPU 持续 100%。
- 必须在项目根目录的
.vscode/settings.json中写入files.watcherExclude,全局设置无效 - 规则要带尾部
/**,写成"**/node_modules"会被忽略 - 务必加上
"**/.git/objects/**":GitLens 等插件会递归监听松散对象,极易触发内存泄漏 -
search.exclude只影响 Ctrl+Shift+F,不减轻监听压力,不能替代files.watcherExclude
tsconfig.json 里这三项不配,TypeScript 语言服务就拖垮 Webpack 构建
Webpack + TypeScript 项目中,TSServer 和 Webpack Dev Server 共享同一套 AST 解析逻辑。若 tsconfig.json 没做裁剪,TSServer 会在每次保存时重分析整个 node_modules 类型定义,直接拖慢 Webpack 的增量编译速度。
-
"incremental": true:启用增量编译缓存,避免全量重分析(需配合tsbuildinfo文件) -
"skipLibCheck": true:跳过node_modules下.d.ts类型检查,开发阶段完全可接受 -
"composite": true:仅当项目含references(如 monorepo 子包)时启用,否则反增开销
VSCode 启动参数不加 --max-memory=4096,Webpack 构建中途必崩
Electron 主进程默认不限制 V8 堆内存,而 Webpack 构建过程中大量生成 AST、SourceMap、模块图等对象,主进程堆内存很容易突破 3GB 触发 OOM。这不是配置问题,是 Electron 运行时限制缺失。
- 永远用命令行启动:
code --disable-extensions --disable-gpu --max-memory=4096 . -
--max-memory=4096单位是 MB,仅作用于主渲染进程,不影响 Extension Host -
--disable-extensions必须加:ESLint、Prettier、TypeScript 插件会在构建前预热语言服务,抢走 Webpack 所需内存 - 不要依赖 GUI 双击打开——它绕不开默认加载项,OOM 概率翻倍
Extension Host 内存不降?换 local-process 模式隔离 Webpack 相关插件
Webpack 项目常搭配 ESLint、Stylelint、Import Sorter 等 LSP 类插件,它们默认共用一个 Extension Host 进程。一旦某个插件内存泄漏(比如旧版 eslint-plugin-import),整个进程内存只涨不跌,连带 Webpack Dev Server 响应变慢。
- 在
.vscode/settings.json中添加:"extensions.experimental.affinity": { "esbenp.prettier-vscode": 2 } - 数字
2表示该扩展运行在独立 Extension Host 进程,与 UI 主进程隔离 - 优先为 LSP 类插件(
ms-vscode.vscode-typescript-next、dbaeumer.vscode-eslint)设置 affinity - 避免为所有插件统一设 affinity——进程开销本身也吃内存,挑关键几个即可
files.watcherExclude 必须写进工作区配置,且规则路径末尾缺 /** 就等于没写。


















