mcpField
K
knip

knip

github.com/liaoann开发039 次安装4 周前更新
代码仓库

关于 knip

knip 是一项仓库指导技能,帮助配置 Knip 检测未使用的文件、导出和依赖,同时减少误报。它面向需要审查 Knip 结果并避免大范围关闭检查的开发者。

主要功能

  1. 01指导配置 knip.jsonc
  2. 02保留导出检查的规则
  3. 03处理生成的 shadcn/ui 文件
  4. 04管理 CSS 导入的依赖
  5. 05按序减少检测噪声

适用场景

  1. 01在仓库中配置 Knip
  2. 02审查并处理 Knip 检测结果
  3. 03检查忽略项与排除规则

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/liaoann/skills --skill knip

安装后在 Claude Code 中输入/knip确认已加载。

详细介绍

Knip

配置 Knip(用于检测未使用文件、导出和依赖的工具),让它持续发现真正的死代码,同时避免产生大量误报。

适用范围

当改动涉及 Knip 配置或需要处理 Knip 的输出时使用。本指南提供建议,不是操作流程。

规则

配置文件使用 knip.jsonc

不要使用 knip.json、knip.ts 或 package.json 中的配置项。JSONC 支持注释,而且每个忽略项旁都需要写明原因——如果 ignoreDependencies 中只有一个裸包名,一个月后就无法审核它为何被忽略。

{
  "$schema": "https://unpkg.com/knip@6/schema-jsonc.json",
  "entry": ["src/index.ts"],
  "project": ["src/**/*.{ts,tsx}"]
}

只有当配置需要用到无法通过数据表达的 compilers 函数时,才使用 knip.ts。

绝不设置 ignoreExportsUsedInFile

如果导出的 type / interface 只有本文件中的函数会用到,那么它只是一个多写了 export 关键字的本地类型。Knip 默认值(false)会报告这一问题——这正是你想要的检查结果。将其设为 true,或细化设置为 { "interface": true, "type": true },都会取消这项检查。通过排除 types 问题类型来让 CI 变绿也是如此。

解决此类问题的方法是移除 export 关键字。如果某个导出确实必须保持公开,就为该符号添加标记(/** @public */,并设置 "tags": ["-public"]),而不是放宽全局选项。

shadcn/ui:忽略生成目录
{
  // Generated by shadcn/ui — not hand-authored, do not prune.
  "ignore": ["src/components/ui/**"]
}

这些文件是随项目提供的生成文件,包含未使用的变体;清理它们只会让你下次运行 shadcn add 时丢失这些文件。路径应与项目的 components.json 别名匹配。

结果是:ignore 会将这些文件从依赖图中移除,因此仅在这些文件中使用的包(radix、class-variance-authority、clsx、tailwind-merge、lucide-react 等)现在会被报告为未使用——将项目实际用到的包加入 ignoreDependencies。如果列表太长,可以改用 "entry": ["src/components/ui/**"]:这样不会报告导出,但导入仍会计入。

CSS 导入的包应加入 ignoreDependencies

Tailwind v4 通过 CSS(@import "tailwindcss")接入,Knip 不会扫描 CSS,因此会产生误报。

{
  "ignoreDependencies": [
    // Imported from CSS, invisible to the module graph.
    "tailwindcss",
    "tw-animate-css"
  ]
}

删除 Knip 标记的任何依赖前,先对样式表执行 grep。

按以下顺序消除噪声

entry / project glob → 插件配置 → 针对性忽略(ignoreDependencies、ignoreFiles、标签)→ 最后才用 ignore。绝不要通过扩大顶层 exclude 来消除某个发现;这会为了隐藏一个实例而禁用整个仓库的检查。

完成标准

  • 配置文件为 knip.jsonc,并使用 schema-jsonc.json $schema(除非 compilers 要求使用 knip.ts)。
  • 未设置 ignoreExportsUsedInFile,且未排除 types。
  • 每个 ignore / ignoreFiles / ignoreDependencies 条目旁都有注释说明原因。
  • 已忽略 shadcn 的 components/ui/**,或将其设为 entry;若选择忽略,则列出仅在其中使用的依赖。
  • CSS 导入的包已加入 ignoreDependencies,而非从 package.json 中移除。
  • knip 运行无误,且没有在整个仓库范围内禁用任何检查。

评论

支持 Markdown