理解与检测 npm 生态系统中的同行依赖解析循环
软件工程
2025-06-04 v2
摘要
作为 Node.js 的默认包管理器,npm 已成为世界上最大的包管理系统之一。为便于开发人员进行依赖管理,npm 支持一种特殊类型的依赖——同行依赖(Peer Dependency),其安装和使用方式不同于常规依赖。然而,同行依赖之间的冲突会使 npm 客户端陷入无限循环,导致资源耗尽和系统崩溃。我们称此问题为 PeerSpin。尽管 PeerSpin 对生态系统构成严重风险,但其被前人忽视且影响尚未探讨。为弥合这一差距,本文首次深入研究 npm 生态系统中的 PeerSpin。首先,通过系统性分析 npm 的依赖解析过程,我们识别了 PeerSpin 的根源并描述了两种同行依赖模式以指导检测。其次,我们提出一种基于节点替换冲突的 PeerSpin 检测技术,利用依赖解析期间目录树的状态实现精准高效的 PeerSpin 检测。基于此技术,我们开发了名为 PeerChecker 的检测工具。最终,我们将 PeerChecker 应用于整个 NPM 生态系统,发现 5662 个软件包(共计 72968 个版本)存在 PeerSpin。迄今为止,我们已确认 28 个真实的 PeerSpin 问题并向软件包维护者报告。我们还开源了所有 PeerSpin 分析实现、工具和数据集,以帮助社区检测 PeerSpin 问题并提升 npm 生态系统的可靠性。
引用
@article{arxiv.2505.12676,
title = {Understanding and Detecting Peer Dependency Resolving Loop in npm Ecosystem},
author = {Xingyu Wang and Mingsen Wang and Wenbo Shen and Rui Chang},
journal= {arXiv preprint arXiv:2505.12676},
year = {2025}
}