vscode本身不检测代码重复,所谓“忽略node_modules检测代码重复”实为第三方插件(如duplicate-code-detector、code-metrics或eslint+eslint-plugin-duplicate)扫描时误入node_modules;核心在于插件自身是否支持exclude配置及是否正确触发,而非vscode设置。

VSCode 本身不检测代码重复,所谓“忽略 node_modules 检测代码重复”,实际是第三方插件(如 duplicate-code-detector、code-metrics 或 ESLint + eslint-plugin-duplicate)在扫描时误入 node_modules。核心问题不在 VSCode 设置,而在插件自身的路径过滤逻辑是否被正确触发。
插件是否支持 exclude 配置?查文档先看 key 名
不同插件控制排除路径的配置项名称完全不同,不能一概套用 search.exclude:
-
duplicate-code-detector:需在.vscode/settings.json中设"duplicate-code-detector.exclude": ["**/node_modules/**"],注意值是数组,不是对象 -
code-metrics:读取项目根目录下的.codemetrics.json,其中"excludedPaths"字段填["node_modules", "dist"] - ESLint 类插件:靠
.eslintignore文件,内容写node_modules/即可;若用eslint-plugin-duplicate,它默认继承.eslintignore,无需额外配 - 没提供 exclude 配置项的插件?基本只能禁用——这类插件通常设计粗糙,强行扫描
node_modules会导致 OOM 或卡死
为什么写了 exclude 还报 node_modules 里的重复?
常见原因不是配置错,而是插件启动时机或作用域不对:
根据 package.json 中的 engines 字段自动检测 Node.js 版本需求,未安装 nvm 时自动安装并切换至对应版本。支持 Windows、macOS、Linux。适用于 Node.js 项目开发、版本切换和环境配置。
- 插件只对打开的文件生效(on-type 模式),而你看到的“重复提示”其实是从已缓存的
node_modules文件里来的——说明插件曾全量扫描过,且没清缓存 - 某些插件(尤其旧版)把
node_modules当作“可解析依赖”而非“排除目标”,即使配置了 exclude,也会在解析 AST 时加载其类型定义(如@types/react),从而触发误报 - VSCode 的
files.watcherExclude对插件无效,别指望靠它阻止插件读取node_modules - 检查插件输出面板(Ctrl+Shift+U → 选对应插件名):如果日志里出现
Scanning /path/to/node_modules/xxx.js,说明插件根本没读你的 exclude 配置,该换插件了
临时绕过:用工作区级 .eslintignore 最稳
如果你用的是基于 ESLint 的重复检测(比如搭配 eslint-plugin-duplicate),这是目前最可靠、兼容性最好的方式:
- 在项目根目录新建
.eslintignore,内容仅一行:node_modules/ - 确保该文件存在且未被
.gitignore忽略(否则部分插件会跳过读取) - 重启 VSCode 插件主机(Ctrl+Shift+P →
Developer: Restart Extension Host),让插件重读 ignore 规则 - 验证:打开一个
node_modules里的文件,看右下角 ESLint 状态是否显示 “Disabled in ignored file”
真正容易被忽略的是:插件自身更新后可能废弃旧配置项,或者改用新的 ignore 机制(比如转向读 .gitignore)。每次插件升级后,务必重查它的最新文档里关于 exclude 的说明,而不是复用旧配置。










