vscode打开项目卡在“扫描中”是因为默认监听node_modules等大目录触发海量i/o事件,需同步配置search.exclude、files.watcherexclude和files.exclude三者,缺一不可;必须写入项目级.vscode/settings.json并重载窗口生效。

为什么VSCode打开项目就卡在“扫描中”
根本不是项目太大,而是VSCode默认把node_modules、venv、.git/objects这些目录全塞进文件监视和索引队列。一个含 5 万文件的node_modules会触发同等数量的fs.watch事件,主线程直接被I/O压垮——你看到的“扫描中”,其实是系统在拼命注册监听句柄。
必须同步配置的三个排除项
search.exclude、files.watcherExclude、files.exclude三者作用完全不同,漏掉任意一个都会失效:
-
search.exclude只跳过搜索时读取内容,不影响监听 -
files.watcherExclude阻止系统注册监听路径,从源头掐断I/O风暴 -
files.exclude让资源管理器里根本看不到那些目录,减少UI渲染负担
真实有效的.vscode/settings.json片段(直接复制进项目根目录):
{
"search.exclude": {
"**/node_modules/**": true,
"**/venv/**": true,
"**/.venv/**": true,
"**/__pycache__/**": true,
"**/.mypy_cache/**": true,
"**/dist/**": true,
"**/build/**": true,
"**/logs/**": true
},
"files.watcherExclude": {
"**/node_modules/**": true,
"**/venv/**": true,
"**/.venv/**": true,
"**/__pycache__/**": true,
"**/.mypy_cache/**": true,
"**/pip-wheel-metadata/**": true,
"**/.git/objects/**": true
},
"files.exclude": {
"**/node_modules/**": true,
"**/venv/**": true,
"**/.venv/**": true,
"**/__pycache__/**": true,
"**/.mypy_cache/**": true,
"**/dist/**": true,
"**/build/**": true
}
}
改完后必须执行workbench.action.reloadWindow(Ctrl+Shift+P输入重载窗口),否则不生效。
Linux/macOS用户额外要检查的点
Linux用户运行cat /proc/sys/fs/inotify/max_user_watches,若低于524288,需执行echo 524288 | sudo tee /proc/sys/fs/inotify/max_user_watches;macOS用户若仍卡顿,可临时加一行"files.useExperimentalFileWatcher": false。
绝对不要把/、/Users/xxx或C:\当工作区打开——这等于命令VSCode全盘监听。
哪些扩展会偷偷拖慢启动
重点看扩展详情页的Activation Events字段:含onStartup或*的,基本就是冷启动时的“罪魁”。比如gitlens、ms-python.python、dbaeumer.vscode-eslint,它们一启动就拉起进程、扫描整个工作区、建索引,哪怕你没开一个Python或JS文件。
右键扩展名 → 选Disable (Global)(全局禁用)或Disable (Workspace)(仅当前项目禁用),别直接卸载;禁用后必须完全退出VSCode(macOS用Cmd+Q,不能只关窗口),否则旧插件进程可能仍在内存里跑。
真正容易被忽略的是:很多优化只改了用户级设置,但files.watcherExclude等监听相关配置**必须写在工作区级.vscode/settings.json中才有效**——这是最常踩的坑。











