检测未使用的“僵尸依赖”需借助第三方工具而非npm自身命令,推荐depcheck(支持js/ts,可识别未引用/缺失/错置依赖)、npm-check-unused(专注dependencies扫描)及ts-prune(ts项目内部符号分析),但动态导入和构建工具注入的依赖需手动忽略。

检测未使用的“僵尸依赖”(即已安装但代码中从未被 import/require 的包)不能靠 npm 自身命令直接完成,因为 npm 只管理安装和版本,不分析代码引用关系。你需要借助第三方工具来静态扫描项目中的 import 语句,并比对 node_modules 和 package.json。
推荐工具:depcheck
depcheck 是最常用、轻量且可靠的开源工具,支持 JavaScript/TypeScript,能识别:
- 已安装但未在代码中引用的依赖(真正的“僵尸包”)
- 已引用但未安装的依赖(缺失依赖)
- 只在
devDependencies中使用却出现在dependencies的情况(可配规则)
安装并运行:
npm install -g depcheck<br>depcheck
常见输出示例:
Unused dependencies<br>├── lodash<br>└── moment<br><br>Missing dependencies<br>├── axios
如需忽略某些误报(如动态 require、webpack 别名、或测试工具),可创建 .depcheckrc.json 配置文件:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
{<br> "ignore": ["jest", "eslint"],<br> "ignores": ["**/*.test.js", "**/mocks/**"]<br>}
补充方案:npm-check-unused
另一个专注“未使用检测”的工具,更简洁,适合快速扫描:
npm install -g npm-check-unused<br>npm-check-unused
它默认只报告 dependencies 中未被引用的包,不检查 devDependencies(除非加 --dev 参数)。输出更紧凑,适合 CI 环境集成。
配合 TypeScript?用 ts-prune(进阶)
如果你项目是 TypeScript,ts-prune 能检测未导出/未使用的 内部符号(如未导出的函数、类型、接口),但它不查第三方包是否被引入——所以要和 depcheck 配合使用:
npm install -g ts-prune<br>ts-prune
注意:ts-prune 依赖正确的 tsconfig.json,且只分析 .ts 文件,不处理动态导入或字符串形式的模块名。
注意事项与避坑提示
- 动态导入(
import(moduleName)、require(expr))无法被静态分析识别,相关依赖会被误判为“僵尸”,需手动加入 ignore 列表 - Webpack 的
require.context、Vite 的 glob 导入、或插件自动注入的包(如 babel-polyfill)也属于“不可见引用”,需配置排除 - 运行前确保项目已成功构建或至少能被 TypeScript 编译器解析(尤其对 ts-prune)
- 删除依赖前务必
git commit或备份,建议先用--dry-run(部分工具支持)预览
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










