用途:清理仓库中已死的部分,包括未使用的依赖、无引用的导出、不可达代码和孤立文件。适用于“移除死代码”“清理未使用依赖”“哪些可以删除”等场景,也用于重构后遗留的孤立文件与导出,以及无人再导入的包造成的打包/安装臃肿。
主要能力:扫描死依赖(声明但从未导入,以及被导入但未声明的缺失依赖)与死代码(无引用导出、不可达分支、孤立文件)。JS/TS 可用 depcheck 或 knip(knip 也覆盖导出/文件)、ts-prune、eslint no-unused-vars;Python 可用 deptry、vulture、ruff 未使用规则;Go 可用 go mod tidy(diff)、未使用模块检测、deadcode ./...、staticcheck(U1000)。优先使用项目已有工具,结果仅视为候选,删除前需确认未被动态导入、反射、依赖注入、公共 API 或配置字符串引用。
使用方式:按风险分批(TRIAGE)。第 1 批为未使用的 devDeps、无引用的本地导出/函数,默认立即修复;第 2 批为未使用的运行时依赖、孤立内部文件,确认无动态引用后本轮修复;第 3 批为可能经公共 API、插件系统、动态 require、反射或配置可达的内容,通常延后或需用户确认。每批只处理一类,删除后运行完整测试、构建与类型检查;若变红说明并非死代码,应回滚并重新分类。删除依赖需从清单移除、重新生成锁文件并重建。
限制:静态工具会漏掉动态引用,无法证明已死的内容不得自动删除。不要删除生成文件、vendored 代码、公共 API 表面,以及无法追踪的配置/插件所依赖的内容,应报告为“疑似死代码,需人工判断”。配置中 preferences.health.protectedPaths 匹配的路径永不删除。避免一次性大清理,以免回归无法二分定位;prune 只移除死物,不重构活代码,重构应使用 simplify 或 work。配套命令包括 /absolute simplify、/absolute upgrade、/absolute debt。