VSCode默认不扫描node_modules等外部库代码,重复检测仅限search.exclude未排除的项目文件;需手动调整该配置并重载窗口才能审计特定依赖。

VSCode 本身不分析外部库代码,所谓“对外部库检测重复”是误解——它只扫描你项目里 search.exclude 没拦住的源文件;node_modules 默认被排除,插件也默认不进那里扫。
为什么 search.exclude 会阻止重复检测
VSCode 的全局搜索和重复检测插件(如 CodeMirror Duplicate Finder)都依赖 search.exclude 配置决定“哪些文件能被读”。一旦路径匹配上该配置项,连内容都不会加载,更别说比对相似度了。
-
"**/node_modules": true是默认值,意味着所有依赖包源码(哪怕你本地 link 过)全被跳过 - 如果你手动把
src/lib加进files.exclude,但没同步加到search.exclude,那资源管理器里看不到文件,但重复检测仍可能扫到——这反而造成行为不一致 - 某些 monorepo 工具(如 pnpm workspace)把依赖软链到
node_modules/.pnpm/xxx,而**/node_modules规则仍会覆盖它,导致实际想查的本地包也被屏蔽
想查 node_modules 里的重复代码?先关掉排除
这不是常规操作,但当你需要审计某个被 fork 或 patch 过的依赖(比如自己改过的 lodash-es),就得临时放开扫描范围。注意:仅限必要场景,否则搜索变卡、结果爆炸。
- 打开
settings.json(用户或工作区均可),删掉或注释掉"**/node_modules": true这一行 - 如果只想扫特定包,用更细粒度写法:
"**/node_modules/(?!my-local-pkg)/": true(需启用正则支持,且 VSCode 原生不支持负向先行断言,所以推荐直接删+手动加白名单) - 更稳妥的做法:在
search.exclude里显式放行,例如:"**/node_modules/my-local-pkg/**": false—— 注意必须写false,不是删掉 - 改完后重启 VSCode 或重载窗口(
Developer: Reload Window),否则缓存可能让设置不生效
重复检测插件对依赖路径的实际限制
CodeMirror Duplicate Finder 不会主动绕过 search.exclude,但它有额外一层过滤:如果文件被 .gitignore 排除,且插件没设 duplicate-finder.ignoreGitIgnore: false,那即使 search.exclude 放开了,它照样跳过。
- 检查你项目根目录的
.gitignore,确认没有意外写入src/**或packages/**这类宽泛规则 - 若依赖是通过
file:../some-pkg方式引用的本地路径,确保该路径不在.gitignore且没被search.exclude拦截 - 插件默认跳过注释和字符串内容,如果你在
node_modules里查的是模板字符串中的逻辑(比如某 UI 库的 JSX 片段),得额外开启"duplicate-finder.includeStrings": true - 别指望它识别跨语言等价写法:JS 的
for (let i = 0; i 和 TS 的 <code>for (const item of arr)在插件眼里就是两段不同代码
真正容易被忽略的点是:插件扫描行为受三重过滤叠加影响——.gitignore → search.exclude → 插件自身配置。少调一个,就可能漏掉本该看到的重复块;多调一个,又可能把构建产物也拖进来干扰判断。动手前先 Ctrl+Shift+F 搜个关键词验证路径是否可达,比盲目调参更省时间。


















