SuperAPI AI 工具集

dead-code-analysis

通用与其它

查看项目

更新于 10-15 23:48

技能介绍

用途:使用 knip 查找 TypeScript/JavaScript 项目中未使用的文件、导出、类型和 package.json 依赖,适用于 Node.js 后端、Next.js 应用、React 库、shadcn/ui 组件库和通用 monorepo。

主要能力:识别四类问题——未使用文件(全项目无导入者)、未使用导出(导出但无其他模块导入)、未使用类型(导出但未被外部导入)、未使用依赖(package.json 中依赖但 src/ 无 import)。

使用方式:运行 pnpm analyze:dead 执行完整分析;pnpm analyze:dead:exports 仅检查导出与类型;pnpm analyze:dead:dependencies 仅检查依赖。knip 发现问题时退出码为 1,属预期行为而非工具错误。

关键限制:未使用导出不等于应删除。需逐项调查:先用 grep -n "symbolName" 检查是否在同文件内被调用(预置导出);再用 grep -rn 查找是否有其他代码实现相同功能(被绕过的工具函数);再判断是否存在本应调用它的消费者(接线缺口);最后阅读上下文判断是否因方向变更而孤立。

已知误报:ESLint 插件(在 src/ 外的 eslint.config.js 中使用)、CSS 工具链(clsx、tailwind-merge、cn() 通过配置或主题文件使用)、shadcn/ui 组件(自动生成的重复样板)、Next.js 路由(app/ 或 pages/ 通过文件系统路由而非导入使用)。

配置:可通过 knip.json 设置 entry、project、ignore、ignoreDependencies 和 ignoreExportsUsedInFile。Next.js App Router 需将 app/page.tsx、app/layout.tsx 等加入 entry 或 ignore;Pages Router 需处理 pages/_app.tsx、pages/_document.tsx、pages/api/*.ts;React 库以 src/index.ts 为入口;Node.js 后端以 src/index.ts 为入口。

交叉解读:knip 报告未使用导出且 jscpd 报告同一代码在别处重复,说明该工具函数被绕过,逻辑被内联重写。