移除废弃依赖需先用depcheck扫描未使用/缺失依赖,再按dependencies或devdependencies类型执行npm uninstall或npm uninstall -d,最后运行npm prune清理残留子依赖。

移除废弃依赖不是简单删掉 package.json 里的条目,而是要确认它确实没被代码使用、分清依赖类型、执行正确命令,并清理残留。关键在“先查后删”,避免误伤或留坑。
先用工具扫描未使用的包
手动翻代码效率低还容易漏,推荐用 depcheck 自动识别:
- 安装:npm install --save-dev depcheck(或全局 npm install -g depcheck)
- 运行:在项目根目录执行 depcheck
- 输出会明确列出:Unused dependencies(如 moment、lodash)和 Unused devDependencies(如 jest、eslint),以及缺失的依赖(Missing dependencies)
注意:depcheck 默认分析 .js、.ts、.jsx、.tsx 文件,若项目含自定义扩展名(如 .vue 或 .svelte),需通过 --parsers 配置指定解析器。
按类型执行卸载命令
package.json 中的依赖分两类,卸载必须匹配类型,否则命令无效:
- 普通依赖(运行时必需):用 npm uninstall 包名,自动从
dependencies删除并移除 node_modules 中的文件 - 开发依赖(仅构建/测试用):用 npm uninstall -D 包名(或
--save-dev),从devDependencies移除 - 不确定在哪?先运行 npm list --depth=0 查顶层依赖,或直接打开 package.json 确认字段位置
清理残留子依赖
卸载主包后,它的子依赖可能仍留在 node_modules 里,但已无声明——这些是潜在隐患:
- 运行 npm prune:自动删除所有在 package.json 中未声明、却存在于 node_modules 的包
- 如果项目状态混乱(比如多次手动删改 node_modules),更彻底的做法是:删掉 node_modules 和 package-lock.json,再执行 npm install
留意可退役的“过气”包
2026 年很多常用功能已有原生替代,这类包建议优先清理:
- fetch / AbortSignal.timeout() → 替代 axios、node-fetch
- structuredClone() → 替代 lodash.cloneDeep
- crypto.randomUUID() → 替代 uuid、nanoid
- Array.prototype.toSorted() / findLast() → 替代 lodash/array 方法
- Node.js --env-file → 替代 dotenv(需确认 Node 版本 ≥ 20.6)
删之前检查代码中是否还有显式 import 或 require,尤其注意别名写法(如 import { cloneDeep } from 'lodash' 和 import _ from 'lodash' 行为不同)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











