如何让jscpd忽略TypeScript/JavaScript中的所有import语句?
如何配置jscpd忽略TypeScript中的所有import语句
我维护着两个TypeScript项目:一个Node.js后端API,一个Ionic混合移动应用。最近引入jscpd检测代码重复,整体效果不错,但遇到了一个问题——jscpd会把重复的import语句识别为代码重复。尝试过在配置里加"ignore": ["import .*"]但完全没用,查了相关讨论也没得到明确方案,求可行的配置方法。
现有配置与运行脚本
.jscpd.json
{ "path": ["src/"], "output": "cpd", "reporters": ["console", "html"], "minLines": 2, "minTokens": 10, "blame": true, "threshold": 0.1, "languages": ["typescript"], "ignore": ["import .*"] }
运行脚本:
jscpd --config .jscpd.json # 执行jscpd检测 open ./cpd/html/index.html # 在浏览器打开检测结果
解决方案:使用ignorePatterns字段匹配代码行
原来的ignore字段是用来忽略文件/目录路径的,不是用来匹配代码内容的。要忽略特定代码行,需要用jscpd的ignorePatterns配置项,它接受正则表达式数组,用来匹配需要排除的代码行。
修改后的配置文件
{ "path": ["src/"], "output": "cpd", "reporters": ["console", "html"], "minLines": 2, "minTokens": 10, "blame": true, "threshold": 0.1, "languages": ["typescript"], "ignorePatterns": [ // 匹配所有TypeScript import语句 "^import\\s+(type\\s+)?(\\*\\s+as\\s+\\w+|\\{[^}]+\\}|\\w+)?\\s*(from\\s+['\"].*['\"])?\\s*;?$" ] }
正则说明
这个正则可以覆盖几乎所有TypeScript import场景:
- 常规导入:
import { User } from './models'; - 类型导入:
import type { Config } from './config'; - 命名空间导入:
import * as utils from './utils'; - 无模块导入:
import './styles.css';
如果需要更简单的写法,也可以用简化版(覆盖绝大多数场景):
"ignorePatterns": ["^import\\s+.*;?$"]
验证效果
修改配置后重新运行你的检测脚本,检查生成的报告,import语句应该不会再被标记为代码重复了。
内容的提问来源于stack exchange,提问作者Viraj Shah
相关产品推荐
相关产品推荐

