重构清理¶
安全地识别并移除死代码,并在每一步进行测试验证。
步骤 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:安全移除循环¶
对于每个安全项:
- 运行完整测试套件 — 建立基线(全部通过)
- 删除死代码 — 使用 Edit 工具进行精准移除
- 再次运行测试套件 — 检查是否有破坏
- 如果测试失败 — 立即使用
git checkout -- <file>回滚并跳过此项 - 如果测试通过 — 继续下一项
步骤 4:处理谨慎项¶
删除谨慎项之前:
- 查找动态导入:import(), require(), __import__
- 查找字符串引用:配置中的路由名称、组件名称
- 检查是否由包的公共 API 导出
- 确认没有外部消费者(如果已发布,检查依赖方)
步骤 5:合并重复项¶
移除死代码后,查找: - 几乎重复的函数(相似度 >80%)— 合并为一个 - 冗余的类型定义 — 合并 - 无价值的包装函数 — 内联 - 无目的的重新导出 — 移除间接层
步骤 6:总结¶
报告结果:
Dead Code Cleanup
──────────────────────────────
Deleted: 12 unused functions
3 unused files
5 unused dependencies
Skipped: 2 items (tests failed)
Saved: ~450 lines removed
──────────────────────────────
All tests passing PASS:
规则¶
- 运行测试前绝不删除
- 一次只移除一项 — 原子变更便于回滚
- 如有疑问,跳过 — 保留死代码好过破坏生产环境
- 清理期间不要重构 — 分离职责(先清理,后重构)
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 ev/ECC