Find Orphans
/install find-orphans
孤儿文件与无效代码清理(Find Orphans)
系统化分析项目中的孤儿文件、未使用的组件和无效代码,帮助清理历史遗留。
触发场景
- 用户说「清理无用代码」「查找孤儿文件」「删除未使用的文件」「项目瘦身」
- 重构前的准备工作、代码审计
- 项目历史遗留清理
执行流程
1. 项目结构分析
读取 package.json,识别:
- 框架类型(React/Vue/Angular/Next.js)
- 构建工具(Vite/Webpack/Rollup)
- 入口文件(main 字段、scripts.dev/build 指向的文件)
扫描目录结构,识别:
- 源码目录:
src/、app/、lib/ - 组件目录:
components/、views/、pages/ - 工具目录:
utils/、helpers/、hooks/ - 样式目录:
styles/、css/
2. 孤儿文件检测
步骤一:收集所有源码文件
用 Glob 扫描所有 .ts、.tsx、.vue、.js、.jsx、.css、.scss 文件,排除:
node_modules/、dist/、build/、.next/*.config.*、*.d.ts*.test.*、*.spec.*(除非用户要求包含)
步骤二:提取所有 import 引用
用 Grep 搜索所有 import/require 语句,将相对路径解析为绝对路径,构建「被引用文件集合」。
步骤三:比对找出孤儿
所有源码文件 - 入口文件 - 被引用文件集合 = 孤儿文件
特殊检测:
- 路由孤儿:读取路由配置文件(
router/index.ts、routes.ts),找出pages/目录下未在路由中注册的组件 - 样式孤儿:检查
.css/.scss/.less是否被任何文件 import 或在 HTML 中\x3Clink>引用 - 资源孤儿:检查
assets/中的图片/字体是否在代码或样式中被引用
3. 未使用组件检测
导入但未使用:
对每个文件,提取 import 的标识符,检查该标识符是否在文件其余部分出现(排除 import 行本身):
- React:检查是否出现在 JSX 标签中(
\x3CButton) - Vue:检查是否在
components: {}注册且在\x3Ctemplate>中使用
Barrel exports 未使用:
找到所有 index.ts barrel 文件,提取其 export 的标识符,全局搜索这些标识符是否被其他文件 import。未被引用的即为无效导出。
4. 无效工具函数检测
扫描 utils/、helpers/、hooks/、lib/ 目录:
导出但未被 import:
- 找到所有
export function/export const定义 - 全局搜索是否有文件 import 了这个名字
- 未被 import 的标记为无效
文件内定义但未调用的私有函数:
- 找出所有非 export 的
function xxx定义 - 检查函数名是否在文件其他位置被调用
重复工具函数:
- 在 utils 目录中搜索功能相似的函数(相同参数类型、相似函数名)
- 标记为「可能重复,建议合并」
5. 安全验证
在标记为「可删除」前,对每个候选文件验证:
- 不在 package.json 的
files或exports字段中 - 不是动态 import 的目标(搜索
import(中的字符串拼接) - 不在 vite.config / webpack.config 的
entry中 - 不被
.gitignore的反向规则保护(!filename)
6. 输出清理报告
按以下格式输出,并询问用户是否生成删除脚本:
输出模板
## 孤儿文件清理报告
### 📊 统计摘要
- 扫描文件总数:N
- 孤儿文件:N 个
- 未使用组件:N 个
- 无效工具函数:N 个
- 预计可删除代码:~N 行
---
### 🔴 建议立即删除
#### 完全未引用的文件
| 文件 | 行数 | 最后修改 | 备注 |
|------|------|----------|------|
| `src/components/OldModal.tsx` | 312 | 2023-08 | 可能被 NewModal.tsx 替代 |
| `src/utils/legacy.ts` | 89 | 2022-11 | 导出 3 个函数,全部未使用 |
#### 路由未注册的页面组件
- `src/pages/TestPage.tsx` — 未在 router/index.ts 中注册
#### 孤儿样式文件
- `src/styles/old-theme.scss` — 无任何文件 import
---
### 🟡 需要人工确认
#### 可能被动态引用
- `src/plugins/dynamicLoader.ts` — 项目中存在动态 import 模式,无法静态分析确认
#### 导入但未在 JSX 中使用的组件
- `src/pages/Dashboard.tsx` 中导入了 `\x3CChart>` 但未使用(可能是注释掉的功能)
---
### 🟢 已排除(自动跳过)
- 配置文件:vite.config.ts、tsconfig.json 等
- 类型声明:*.d.ts
- 公共入口:main.tsx、App.tsx
---
### 🔧 下一步
是否生成删除脚本?运行前建议先:
1. `git checkout -b cleanup/remove-orphans`
2. 审查脚本中的每个文件
3. 执行脚本后运行构建验证:`npm run build`
如果用户确认,生成 cleanup-orphans.sh:
#!/bin/bash
# 孤儿文件清理脚本 - 生成于 YYYY-MM-DD
# 回滚:git checkout backup-before-cleanup
set -e
git rm src/components/OldModal.tsx
git rm src/utils/legacy.ts
git rm src/pages/TestPage.tsx
git rm src/styles/old-theme.scss
echo "清理完成,请运行 npm run build 验证"
误报场景(需人工判断)
| 场景 | 原因 | 处理方式 |
|---|---|---|
| 动态路由文件 | pages/[id].tsx 通过约定路由加载 |
检查框架路由约定 |
require.context |
Webpack 批量加载目录 | 搜索 require.context 用法 |
| 环境变量控制的功能 | feature flag 动态引用 | 检查 process.env 条件分支 |
| 测试 mock 数据 | 仅在测试中使用 | 加 --include-tests 重扫 |
| Service Worker / PWA | 通过 public/ 直接引用 | 检查 public/ 目录配置 |
注意事项
- 不要删除:正在开发的功能分支文件、feature flag 控制的实验性功能
- 分批清理:先删高置信度文件,构建验证通过后再处理中置信度
- 保留 git 历史:用
git rm而非直接删除
与其他 Skill 配合
/simplify:清理后简化剩余代码/refactor-safely:重构前先用本 skill 清理孤儿/health:清理后检查整体代码质量/review:清理 PR 提交前的安全审查
- Make sure OpenClaw is installed (local or Docker)
- Run the install command in chat:
/install find-orphans - After installation, invoke the skill by name or use
/find-orphans - Provide required inputs per the skill's parameter spec and get structured output
What is Find Orphans?
Finds orphaned files, unused components, and dead code in projects. Use when 清理代码, 查找孤儿文件, 删除无用代码, cleanup, find unused, or removing legacy code. It is an AI Agent Skill for Claude Code / OpenClaw, with 98 downloads so far.
How do I install Find Orphans?
Run "/install find-orphans" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.
Is Find Orphans free?
Yes, Find Orphans is completely free, licensed under MIT-0. You can download, install and use it at no cost.
Which platforms does Find Orphans support?
Find Orphans is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).
Who created Find Orphans?
It is built and maintained by wangzhiming (@wangzhiming1999); the current version is v1.0.0.