如何识别Angular应用中未使用的库与peer dependencies?
识别Angular项目未使用依赖及Peer依赖的方法
通用依赖扫描工具
- 首先使用
depcheck工具做全量扫描,这是前端项目通用的未使用依赖识别工具:- 全局安装:
npm install -g depcheck - 在Angular项目根目录直接执行
depcheck命令 - 工具会自动输出三类结果:未使用的生产依赖、未使用的开发依赖、项目用到但未在package.json声明的缺失依赖
- 全局安装:
- 注意事项:depcheck对Angular项目中的特殊引入场景存在一定误判概率,包括angular.json中配置的全局样式/脚本引入、仅通过动态import加载的依赖、仅在模块forRoot/forChild方法中注册未显式调用变量的依赖,扫描结果需要手动二次核对。
Peer依赖专属识别方法
- 先执行
npm ls --peer(npm环境)或yarn list --peer(yarn环境)打印项目所有顶层及嵌套的Peer依赖列表,筛选出直接声明在你项目package.json中的Peer依赖 - 结合上面depcheck的扫描结果,先移除所有已被判定为未使用的主库对应的Peer依赖:比如主库
@angular/material已被识别为未使用,它关联的Peer依赖@angular/cdk、@angular/animations等如果没有被其他库依赖,也可以同步移除 - 对独立声明的Peer依赖,全局搜索项目src目录下所有
.ts、.html文件中是否存在import 'xxx'、import * as xx from 'xxx'类的引入语句,无匹配结果的即可判定为未使用 - 清理完成后执行
npm prune命令,自动移除所有未被项目任何依赖引用的嵌套冗余包
校验规则(避免误删)
- 每次修改package.json删除依赖后,必须执行
ng build --prod和全量单元测试、E2E测试,确认项目构建和运行逻辑无异常 - 如果是Monorepo结构的Angular项目,需要扫描所有子项目的代码目录,不能仅校验根目录代码
- 针对eslint、stylelint、打包插件类的开发依赖,需要额外核对angular.json、package.json的scripts字段是否有调用,这类仅在构建环节用到的依赖大概率会被depcheck判定为未使用,不要直接删除
内容的提问来源于stack exchange,提问作者Gavishiddappa Gadagi
相关产品推荐
相关产品推荐

