VSCode 中无法直接运行 jscpd,必须通过集成终端执行命令;它无官方插件,不感知 VSCode 配置,需手动指定路径、忽略目录及参数,或使用 .jscpd.json 配置文件统一管理。

VSCode 里不能直接运行 jscpd,得靠终端调用
jscpd 是命令行工具,不是 VSCode 插件。它没有官方 VSCode 扩展,所以右键菜单、侧边栏面板、状态栏按钮这些都不存在。你看到的“一键检测”类描述,基本是混淆了 CodeMirror Duplicate Finder 这类轻量插件和 jscpd 的能力边界。
真正要在 VSCode 里用 jscpd,唯一可靠方式是:打开集成终端(Ctrl+`),cd 到项目根目录,然后执行 jscpd 命令。别指望它自动读取当前打开文件或工作区设置——除非你显式传参。
- 它不会感知 VSCode 的
files.exclude或search.exclude配置 - 它默认也不读
.gitignore(v4 默认开启,但 v3 不开;确认版本用jscpd -V) - 如果你在多根工作区(multi-root workspace),它只扫描你当前终端所在路径下的文件
怎么让 jscpd 在 VSCode 终端里跑得准又快
直接 jscpd . 很容易扫到 node_modules、dist、.next 这些不该参与去重的目录,导致结果失真、耗时暴涨。必须加过滤。
推荐组合参数:
-
--ignore "**/node_modules/**,**/dist/**,**/.next/**,**/build/**":用逗号分隔多个 glob,比写多次--ignore更干净 -
--reporter html,console:同时输出控制台摘要 + 生成可点击的report/html/index.html -
--min-lines 5 --min-tokens 30:前端项目建议调低阈值,--min-lines 5能捕获函数级重复,--min-tokens 30比默认 50 更敏感 -
--path ./src:明确限定范围,比.更安全;若项目含tests目录又不想扫,就写--path "./src,./packages/*/src"
完整示例:jscpd --path ./src --ignore "**/node_modules/**,**/dist/**" --reporter html,console --min-lines 5 --min-tokens 30
配置文件比命令行参数更可持续
每次敲一长串参数太累,也难复用。把常用配置写进 .jscpd.json(放项目根目录),之后只要 jscpd 就自动加载。
一个典型前端项目配置:
{
"path": ["./src"],
"ignore": ["**/node_modules/**", "**/dist/**", "**/.next/**", "**/build/**", "**/public/**"],
"reporter": ["html", "console"],
"minLines": 5,
"minTokens": 30,
"threshold": 0
}
注意点:
-
threshold设为0表示不设门禁(CI 中才需设非零值触发失败) -
ignore字段值必须是数组,不能是字符串;"**/node_modules/**,**/dist/**"这种写法只在 CLI 有效,在 JSON 里会解析失败 - VSCode 不会高亮或校验
.jscpd.json语法,但 jscpd 启动时会报错提示字段名错误(比如写成min_lines而非minLines)
别忽略嵌入式代码块的统计偏差
如果你项目里大量用 Markdown 文档里的 ```ts 块,或 Vue/Svelte/Astro 的 SFC 文件,jscpd v5.3.1 之前版本的行数统计是有 bug 的:正文内容会被误算进 TypeScript 行数,导致重复率虚高或指标错位。
验证方法:
- 对同一组重复代码,分别运行:
jscpd .和jscpd -f typescript . - 如果两个命令报告的 “duplicated lines %” 差距极大(比如 50% vs 3%),说明你正踩中这个坑
- 升级到 jscpd v5.3.2+ 即可修复;若卡在 v4,只能接受 token 指标更可信,行数指标慎用
真实项目里,嵌入式代码块的统计逻辑藏得深,没人会主动怀疑行数不准——直到你发现 HTML 报告里标红的“重复行”根本不在代码块内。


















