【问题标题】:How to determine which module/s use an indirect dependency?如何确定哪个模块使用间接依赖?
【发布时间】:2022-11-12 13:29:45
【问题描述】:

在 Go 1.17 中,go.mod 有两个部分,直接依赖项和间接依赖项,但是,没有说明间接依赖项与直接依赖项之间的关系。

我如何才能找出特定的间接依赖项是哪个模块或哪些模块使用它?

【问题讨论】:

  • 请注意,这在 Go 1.17 中并不新鲜。间接依赖总是存在于 go.mod 中,它们只是在 Go 1.17 中被移动到一个新的部分。
  • 相关/可能重复:stackoverflow.com/q/57159707/13860

标签: go dependencies go-modules


【解决方案1】:

go mod why -m $MODULE 将为您提供一个(任意选择的)从模块中的包到$MODULE 中的包的导入链。但是,它本身并不报告所有此类路径。

go list -json all 确实公开了足够的信息来识别这些路径,但它没有提供一种简单的方法来展示供人类消费的进口链。但是,一些第三方工具(如godagomod)可以转换或查询go list 的输出结构更丰富。 (有关查询语法和示例,请参阅他们的文档。)

【讨论】:

  • go mod graph 是可接受的替代方案吗?
  • 不是真的,不。只有在从 // indirect 部分导入了某个包时,才会将模块依赖添加到该部分,但 go mod graph 根本不检查包导入图——它只报告模块之间的依赖关系,而不是那些模块中的包。
  • 换句话说:go mod graph 会给你一个保守的近似值。 (它会报告一些模块到模块的边缘,这些边缘是由与您的程序实际上不相关的包产生的。)
  • 相关,但可能对 OP 提出问题的意图没有那么有用。他们要求“特定的间接依赖关系是哪个或哪些模块使用它”,但对于go.mod 文件中的indirect 模块,真正重要的唯一用途是由主模块传递导入的包。这实际上取决于他们试图回答哪个问题:go mod graph 回答“为什么是这个特定版本?”,而包导入图回答“为什么是这个模块?”。
猜你喜欢
  • 1970-01-01
  • 2010-10-03
  • 2021-04-14
  • 1970-01-01
  • 2019-02-20
  • 2018-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多