Skip to content

插件机制

基于 Knip v6.17.1 编写

速查

  • 155+ 内置插件,按 package.json 里的依赖自动启用,无需手动开
  • 插件做三件事:①解析工具配置文件 ②补充入口文件 ③识别隐式依赖
  • 例:Vitest 插件自动把 **/*.{test,spec}.ts 加为入口
  • 例:ESLint 的 "extends": ["airbnb"] 能被识别出 eslint-config-airbnb 依赖
  • 覆盖 Vite / Jest / Next / Storybook / Playwright / Angular / Webpack 等主流工具
  • 插件缺失或不全是误报的主要来源——可改进插件而非到处 ignore

为什么需要插件

很多依赖不是通过 import 用到的,而是写在工具的配置文件里。比如:

  • .eslintrc.json"extends": ["airbnb", "prettier"] 引用了 eslint-config-airbnbeslint-config-prettier
  • vitest.config.tsplaywright.config.ts 引用了各自的运行器与插件
  • package.jsonscripts 里调用了某个 CLI 命令

纯靠分析 import,这些会被误判为"未使用的依赖"。插件就是来补上这块的

插件做的三件事

  1. 解析配置文件:读 .eslintrcvitest.config.tstailwind.config.js 等,把里面引用到的依赖挖出来,避免误报为"未使用"。
  2. 补充入口文件:自动把工具约定的文件加为 entry。例如 Vitest 插件加上 **/*.{test,test-d,spec,spec-d}.ts,无需你手写。
  3. 识别隐式依赖:从配置里提取并非 import 形式的依赖引用(如 extendsplugins 字段里的包名)。

自动启用

插件package.json 的依赖自动启用:装了 vitest,Vitest 插件就生效;装了 eslint,ESLint 插件就生效。不必在配置里手动声明开启。

json
// 装了这些,对应插件即自动工作
{
  "devDependencies": {
    "vitest": "^4.0.0",
    "eslint": "^9.0.0",
    "next": "^15.0.0"
  }
}

覆盖范围

官方提供 155+ 插件,覆盖绝大多数主流工具,包括但不限于:

领域代表插件
构建/打包Vite、Webpack、Rollup、esbuild、Rspack
框架Next.js、Nuxt、Angular、Remix、Astro、SvelteKit
测试Vitest、Jest、Playwright、Cypress
代码质量ESLint、Prettier、Biome、Stylelint、commitlint
其它Storybook、Tailwind、TypeScript、GitHub Actions

完整清单见官方 Plugins(页面列出全部 150+ 项)。

插件与误报的关系

插件不全 = 误报来源

官方明确指出:缺失或不完整的插件是误报的主要来源。当某工具的依赖被误报为"未使用"时,正确做法往往是改进/新增插件,而非到处加 ignoreDependencies——前者一次解决、对所有项目生效,后者只是局部消音。

如果配置覆盖不到你的自定义入口,可在 Knip 配置里手动补 entry(见 配置)。系统性处理误报的步骤见 处理误报