# 重构清理 通过测试验证安全识别和删除死代码的每一步。 ## 步骤 1:检测死代码 根据项目类型运行分析工具: | 工具 | 查找内容 | 命令 | |------|--------------|---------| | knip | 未使用的导出、文件、依赖项 | `npx knip` | | depcheck | 未使用的 npm 依赖项 | `npx depcheck` | | ts-prune | 未使用的 TypeScript 导出 | `npx ts-prune` | | vulture | 未使用的 Python 代码 | `vulture src/` | | deadcode | 未使用的 Go 代码 | `deadcode ./...` | | cargo-udeps | 未使用的 Rust 依赖项 | `cargo +nightly udeps` | 如果没有可用工具,使用 Grep 查找零次导入的导出: ``` # 查找导出项,然后检查是否有任何地方导入了它们 ``` ## 步骤 2:分类发现结果 将发现结果按安全层级分类: | 层级 | 示例 | 操作 | |------|----------|--------| | **安全** | 未使用的工具函数、测试辅助函数、内部函数 | 放心删除 | | **谨慎** | 组件、API 路由、中间件 | 验证没有动态导入或外部使用者 | | **危险** | 配置文件、入口点、类型定义 | 在操作前仔细调查 | ## 步骤 3:安全删除循环 对于每个 **安全** 项: 1. **运行完整测试套件** — 建立基准(全部通过) 2. **删除死代码** — 使用编辑工具进行精确删除 3. **重新运行测试套件** — 验证没有破坏任何功能 4. **如果测试失败** — 立即使用 `git checkout -- ` 回滚并跳过此项 5. **如果测试通过** — 处理下一项 ## 步骤 4:处理谨慎项 在删除 **谨慎** 项之前: * 搜索动态导入:`import()`、`require()`、`__import__` * 搜索字符串引用:配置中的路由名称、组件名称 * 检查是否从公共包 API 导出 * 验证没有外部使用者(如果已发布,请检查依赖项) ## 步骤 5:合并重复项 删除死代码后,查找: * 近似的重复函数(>80% 相似)— 合并为一个 * 冗余的类型定义 — 整合 * 没有增加价值的包装函数 — 内联它们 * 没有作用的重新导出 — 移除间接引用 ## 步骤 6:总结 报告结果: ``` 无用代码清理 ────────────────────────────── 已删除: 12 个未使用函数 3 个未使用文件 5 个未使用依赖项 已跳过: 2 个项目(测试失败) 已节省: ~450 行代码被移除 ────────────────────────────── 所有测试通过 PASS: ``` ## 规则 * **切勿在不先运行测试的情况下删除代码** * **一次只删除一个** — 原子化的变更便于回滚 * **如果不确定就跳过** — 保留死代码总比破坏生产环境好 * **清理时不要重构** — 分离关注点(先清理,后重构)