NPM 包依赖分析器
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/npm-package-dependency-analyzer。
技能介绍
你在排查什么
当一个项目从几十个依赖膨胀到上千个时,package.json 里的直接依赖只是冰山一角。真正出问题的是水面下的部分:某个传递依赖把整个项目拖进 GPL 许可证冲突,某个间接依赖与另一个包版本互相引用形成循环,或者新引入的库让 bundle 体积凭空多出几百 KB,而你完全看不到是谁引入的。
依赖树越深,这类问题越难靠 npm ls 肉眼排查。
这个技能如何工作
它直接在 Node.js 进程里调用官方工具链,而不是自己解析 package-lock.json:
- 获取元数据:通过
npm-registry-fetch从 registry 拉取包信息,走的是和npm install同一套网络路径。 - 提取依赖树:利用
pacote处理 tarball 与 manifest 的获取与校验。 - 重构依赖图:借助
arborist构建完整的依赖图,它能识别实际安装结果与声明之间的偏差。
在此基础上,技能做三类检查:
- 循环依赖检测:遍历依赖图,找出包之间形成环路的路径,而不是只看直接依赖的声明。
- 许可证冲突识别:对比各包的 license 字段,标记与项目许可策略不兼容的条目。
- 体积影响评估:调用
bundlephobiaAPI 查询每个包的压缩体积,定位对产物大小贡献异常的依赖。
适用边界与注意点
- 它分析的是安装后的真实依赖图,因此锁文件是否与
package.json一致会直接影响结果准确性。 - 对于走私有 registry 或 Docker 内离线环境的模块,需要保证
npm-registry-fetch能访问到对应源,否则部分包元数据会拉取失败。 bundlephobia的体积数据来自公共 registry 的打包结果,私有包或自定义构建配置下的体积可能与此不同。- 许可证检查基于包声明的 license 字段,未声明或声明不规范的包需要人工确认。
使用场景
- 发现 CI 构建时间突然变长,需要定位是哪个传递依赖体积膨胀导致的。
- 开源项目要发布到企业内网前,检查所有依赖的许可证是否与公司策略冲突。
- `npm ls` 报 ERR 但看不出原因,需要可视化依赖图中的循环引用路径。
- 迁移到新框架前,评估现有依赖树中哪些包可以通过替换来减小体积。
适合人员
- 维护开源库的独立开发者,每次发版前需要确认依赖树中没有引入循环或许可证风险。
- 负责前端构建优化的工程师,需要在引入新组件库前评估其对产物体积的影响。
- 管理公司内部工具链的 DevOps 工程师,需要定期审计依赖许可证以防合规问题。
- 排查依赖冲突的 Node.js 后端开发者,需要在合并 Pull Request 前确认没有版本冲突。