插件机制
基于 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-airbnb、eslint-config-prettiervitest.config.ts、playwright.config.ts引用了各自的运行器与插件package.json的scripts里调用了某个 CLI 命令
纯靠分析 import,这些会被误判为"未使用的依赖"。插件就是来补上这块的。
插件做的三件事
- 解析配置文件:读
.eslintrc、vitest.config.ts、tailwind.config.js等,把里面引用到的依赖挖出来,避免误报为"未使用"。 - 补充入口文件:自动把工具约定的文件加为
entry。例如 Vitest 插件加上**/*.{test,test-d,spec,spec-d}.ts,无需你手写。 - 识别隐式依赖:从配置里提取并非
import形式的依赖引用(如extends、plugins字段里的包名)。
自动启用
插件按 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(见 配置)。系统性处理误报的步骤见 处理误报。