跳至主要内容

排查依赖关系图问题

如果依赖关系图报告的依赖信息与您预期不符,需要考虑多个要点,并检查各种内容。

谁可以使用此功能?

依赖关系图适用于以下仓库类型

  • 公共仓库(默认开启)
  • 私有仓库
  • 分叉

GitHub 报告的依赖检测结果可能与其他工具返回的结果不同。这背后有充分的理由,了解 GitHub 如何为您的项目确定依赖关系十分有帮助。

依赖关系图是否只在清单文件和锁文件中查找依赖?

依赖关系图会自动包含您环境中明确声明的依赖信息。也就是说,清单文件或锁文件中指定的依赖会被记录。依赖关系图通常还会包括传递依赖,即使它们未在锁文件中列出,系统也会通过检查清单文件中依赖的依赖来捕获这些传递依赖。

依赖关系图不会自动包含“松散”依赖。“松散”依赖指的是直接从其他来源复制到仓库中,或放在压缩包(如 ZIP 或 JAR 文件)内部的单个文件,而不是通过包管理器的清单或锁文件进行引用的依赖。

不过,您可以使用依赖提交 API将依赖添加到项目的依赖关系图中,即使这些依赖未在清单或锁文件中声明,例如在项目构建时解析得到的依赖。通过依赖提交 API 提交的依赖会显示使用了哪种检测器以及提交的时间。有关依赖提交 API 的详细信息,请参阅 使用依赖提交 API

检查:缺失的依赖是否来自仓库清单或锁文件中未指定的组件?

依赖关系图是否能检测使用变量指定的依赖?

依赖关系图会在清单文件推送到 GitHub 时进行分析。因此,它无法访问项目的构建环境,也就无法解析清单中使用的变量。如果您在清单中使用变量来指定依赖的名称,或更常见的版本号,则该依赖不会自动出现在依赖关系图中。

不过,您仍可通过依赖提交 API 将这些仅在构建时解析的依赖添加到项目的依赖关系图中。有关依赖提交 API 的详细信息,请参阅 使用依赖提交 API

检查:缺失的依赖是否在清单中通过变量来声明其名称或版本?

是否存在影响依赖关系图数据的限制?

是的,依赖关系图对其将处理的清单文件的大小、数量和位置都有限制。

这些处理限制会影响 GitHub 中显示的依赖关系图,并且会阻止生成 Dependabot 警报。

大于 10 MB 的清单文件会被忽略,且不会生成 Dependabot 警报。

默认情况下,GitHub 每个仓库最多处理 150 个清单文件。超出此限制的清单不会触发 Dependabot 警报,且若超过该限制,Dependabot 警报的行为可能变得不可预测。

存放在通常用于供应商依赖的目录中的清单文件将不会被处理。名称匹配以下正则表达式的目录会被视为供应商依赖目录:

  • (3rd|[Tt]hird)[-_]?[Pp]arty/
  • (^|/)vendors?/
  • (^|/)[Ee]xtern(als?)?/
  • (^|/)[Vv]+endor/

示例

  • third-party/dependencies/dependency1
  • vendors/dependency1
  • /externals/vendor1/dependency1

我的依赖看起来不对,我该怎么办?

如果项目的依赖表未准确反映仓库中的清单文件,您可以触发重新构建依赖关系图。

在仓库的 Dependabot 选项卡中,点击警报列表顶部的按钮。从下拉菜单中选择 刷新 Dependabot 警报。系统将把一次后台任务加入队列,以处理仓库的清单文件、检测任何新出现或变更的依赖,并更新警报。

注意

您需要拥有管理安全警报的权限才能刷新仓库的依赖关系图。有关配置此权限的信息,请参阅 管理仓库的安全和分析设置。为进一步降低滥用风险,刷新 Dependabot 警报选项每个仓库每小时只能触发一次。

点击 刷新 Dependabot 警报仅会扫描清单文件。如果您的依赖关系图还包括通过依赖提交 API 提交的构建时依赖信息,重新运行生成并提交依赖信息的 Action 或外部进程也会触发仓库依赖关系图的重建。有关依赖提交 API 的更多信息,请参阅 使用依赖提交 API

如果您使用自动依赖提交,推送更新了仓库清单文件的提交将触发自动提交 Action 运行。

在所有情况下,警报列表顶部的时间戳均表示依赖关系图最近一次构建的时间。

延伸阅读

© . This site is unofficial and not affiliated with GitHub, Inc.