用途:把代码从一个实现逐函数迁移到另一个实现,先移植测试再移植代码,也可对比同一应用的两套实现是否一致。
主要能力:jscpd --compare SOURCE TARGET 用内置代码嵌入模型把源文件夹的每个函数与目标文件夹中做同样工作的函数配对,支持 JavaScript、TypeScript、JSX、TSX、Vue、Svelte、Astro、Python、Rust、Go、Java、Kotlin、C#、C、C++、PHP、Ruby、Scala、Swift。报告分 Code 与 Tests 两块,测试只与测试配对;输出已配对比例、仅存在于某一侧的函数、改名配对及相似度等级(high/medium/low)。JSON 报告含 sides、unmatched、readyToPort、pairs 等字段;-r console-full、-r markdown、-r html 可输出不同格式。
使用方式:先下载模型 npx jscpd --semantic-download(548 MB,需先征得用户同意),再运行 npx jscpd --compare billing-py/ billing-ts/。路径固定为源在前、目标在后且不可重叠。用 .gitignore 或 --ignore 排除 vendor/、node_modules/、target/、build/、dist/ 等依赖与生成代码。移植流程:先用覆盖率把源函数与测试绑定,移植测试,再按 readyToPort 顺序逐函数移植代码,每批后重跑对比。
适用场景:语言或平台间移植、iOS 与 Android 等双实现的一致性检查。
限制:只比较函数,类型、常量、枚举、SQL 与 UI 标记不在报告中;相似度看不出行为漂移,需靠测试与人工阅读;非 git 仓库不读取 .gitignore;未提供收费、价格等信息。